【问题标题】:how to get a drawingsession from a canvascontrol (win2d)如何从画布控件获取绘图会话(win2d)
【发布时间】:2017-02-21 01:04:20
【问题描述】:

在win8应用程序中,如何从canvascontrol(win2d)中获取drawingsession,或者,如何在canvascontrol_Draw函数之外在canvascontrol上绘制图像。

【问题讨论】:

    标签: win2d


    【解决方案1】:

    您不能 - 这是 CanvasControl 提供的政策的关键部分。

    这可确保:

    • 绘图会话在适当的时间创建并关闭

    • 在创建资源之前未尝试绘图

    • 处理设备丢失错误得到处理

    如果你想强制重绘,你可以使用CanvasControl.Invalidate()

    或者,您可能会发现您想要渲染到屏幕外的 CanvasRenderTarget(您可以调用 CreateDrawingSession)。然后在 CanvasControl_Draw 中使用 DrawImage 将渲染目标绘制到控件。

    【讨论】:

      【解决方案2】:

      如果您的目标只是渲染到图像,您可以在不使用 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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多