在 Win2d canvasControl 中,如何在需要时多次调用 createResources 事件?
In Win2d canvasControl , how to call createResources event multiple times whenever needed?
我有一个 canvasControl,因为当我 运行 Program.I 有一个 FilePicker 从 local.Whenever 中选择一个图像源时,CreateResources 事件只会被触发一次,我需要调用 CreateResources 事件来加载资源,然后使用 canvasBitmap 和 DrawingSession 绘制它。
我会画画,但是,我不知道如何加载资源每当图像是 picked.Can 有人建议我,如何实现这个??
在Win2D中,CreateResource
事件只在CanvasControl
加载时触发,即只会触发一次
如果在此之后需要创建资源,则需要创建自定义 LoadResourcesForLevelAsync
方法:
async Task LoadResourcesForLevelAsync(CanvasControl resourceCreator, int level)
{
levelBackground = await CanvasBitmap.LoadAsync(resourceCreator, ...);
levelThingie = await CanvasBitmap.LoadAsync(resourceCreator, ...);
// etc.
}
这个在Win2D文档中有说明,请参考这个文档:
更新
在Draw
事件中加载图片的简单例子:
private string imageFilePath = @"ms-appx:///Assets/StoreLogo.png";
private CanvasBitmap img;
private void CanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
if (img != null)
{
args.DrawingSession.DrawImage(img);
}
else
{
GetImage().Wait();
}
async Task GetImage()
{
await Task.Run(async () =>
{
img = await CanvasBitmap.LoadAsync(sender, new Uri(imageFilePath));
}).ConfigureAwait(false);
}
}
谢谢。
不需要一直在 CreateResource
事件中加载资源,您可以随时加载资源(在 Draw
事件处理程序之外),然后只需调用 Invalidate
方法.看看这个:
CanvasBitmap btmp;
private async void LoadNecessaryResourcesAndDraw()
{
btmp = await CanvasBitmap.LoadAsync(MyCanvasControl, "some_image.png");
MyCanvasControl.Invalidate(); /// this will invoke the draw event
}
public void MyCanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
if(btmp != null)
{
args.DrawingSession.DrawImage(btmp);
}
}
现在您可以随时调用 LoadNecessaryResourcesAndDraw()
方法。它将异步加载图像,然后调用绘制图像的绘制事件。
我有一个 canvasControl,因为当我 运行 Program.I 有一个 FilePicker 从 local.Whenever 中选择一个图像源时,CreateResources 事件只会被触发一次,我需要调用 CreateResources 事件来加载资源,然后使用 canvasBitmap 和 DrawingSession 绘制它。 我会画画,但是,我不知道如何加载资源每当图像是 picked.Can 有人建议我,如何实现这个??
在Win2D中,CreateResource
事件只在CanvasControl
加载时触发,即只会触发一次
如果在此之后需要创建资源,则需要创建自定义 LoadResourcesForLevelAsync
方法:
async Task LoadResourcesForLevelAsync(CanvasControl resourceCreator, int level)
{
levelBackground = await CanvasBitmap.LoadAsync(resourceCreator, ...);
levelThingie = await CanvasBitmap.LoadAsync(resourceCreator, ...);
// etc.
}
这个在Win2D文档中有说明,请参考这个文档:
更新
在Draw
事件中加载图片的简单例子:
private string imageFilePath = @"ms-appx:///Assets/StoreLogo.png";
private CanvasBitmap img;
private void CanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
if (img != null)
{
args.DrawingSession.DrawImage(img);
}
else
{
GetImage().Wait();
}
async Task GetImage()
{
await Task.Run(async () =>
{
img = await CanvasBitmap.LoadAsync(sender, new Uri(imageFilePath));
}).ConfigureAwait(false);
}
}
谢谢。
不需要一直在 CreateResource
事件中加载资源,您可以随时加载资源(在 Draw
事件处理程序之外),然后只需调用 Invalidate
方法.看看这个:
CanvasBitmap btmp;
private async void LoadNecessaryResourcesAndDraw()
{
btmp = await CanvasBitmap.LoadAsync(MyCanvasControl, "some_image.png");
MyCanvasControl.Invalidate(); /// this will invoke the draw event
}
public void MyCanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
if(btmp != null)
{
args.DrawingSession.DrawImage(btmp);
}
}
现在您可以随时调用 LoadNecessaryResourcesAndDraw()
方法。它将异步加载图像,然后调用绘制图像的绘制事件。