我想保留CanvasAnimatedControl中最后绘制的帧以在其上方绘制。
是否有内置功能可以执行此操作,或者我是否必须使用双缓冲。

我想用win2d实现this

最佳答案

here所述:


  创建绘图会话时,Win2D始终会自动清除控件。 CanvasRenderTargets不是。这样,应用程序便能够对CanvasRenderTargets进行增量更改,并避免每次都重新绘制整个场景。




CanvasDevice device = CanvasDevice.GetSharedDevice();
CanvasRenderTarget offscreen = new CanvasRenderTarget(device, width, height, 96);
using (CanvasDrawingSession ds = offscreen.CreateDrawingSession())
{
    //ds.Clear(Colors.Black); // no clear and you are good to go.
    ds.DrawRectangle(100, 200, 5, 6, Colors.Red);
}



  请注意,有一个方法调用Clear。否则,位图将使用未定义的内容进行初始化。





  要将CanvasRenderTarget绘制到另一个绘制会话,只需使用DrawImage(ICanvasImage)或其重载之一。例如:


void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
    args.DrawingSession.DrawImage(offscreen, 23, 34);
}

10-06 13:28