【发布时间】:2017-02-21 01:04:20
【问题描述】:
在win8应用程序中,如何从canvascontrol(win2d)中获取drawingsession,或者,如何在canvascontrol_Draw函数之外在canvascontrol上绘制图像。
【问题讨论】:
标签: win2d
在win8应用程序中,如何从canvascontrol(win2d)中获取drawingsession,或者,如何在canvascontrol_Draw函数之外在canvascontrol上绘制图像。
【问题讨论】:
标签: win2d
您不能 - 这是 CanvasControl 提供的政策的关键部分。
这可确保:
绘图会话在适当的时间创建并关闭
在创建资源之前未尝试绘图
处理设备丢失错误得到处理
如果你想强制重绘,你可以使用CanvasControl.Invalidate()。
或者,您可能会发现您想要渲染到屏幕外的 CanvasRenderTarget(您可以调用 CreateDrawingSession)。然后在 CanvasControl_Draw 中使用 DrawImage 将渲染目标绘制到控件。
【讨论】:
如果您的目标只是渲染到图像,您可以在不使用 CanvasControl.Draw 方法的情况下执行此操作。这是我的一个应用程序中的一些代码,它们呈现为图像并将其保存到文件中(PageRenderer 是我的渲染类):
public async Task GenerateThumbnailAsync(IRandomAccessStream stream, int width, int height, CanvasBitmapFileFormat imageType)
{
CanvasDevice device = CanvasDevice.GetSharedDevice();
PageRenderer renderer = new PageRenderer(device);
using (CanvasRenderTarget offscreen = new CanvasRenderTarget(device, width, height, 96))
{
using (CanvasDrawingSession ds = offscreen.CreateDrawingSession())
{
ds.Clear(Colors.Black);
renderer.DrawPage(ds);
}
await offscreen.SaveAsync(stream, imageType);
}
}
【讨论】: