0

我正在使用 win2d 进行“hello world”类型测试。在我的画布绘制事件中,这给了我一个漂亮的圆形,正如我所期望的:

args.DrawingSession.FillCircle(100, 100, 50, Windows.UI.Colors.Red)

但我想画“离屏”,所以我尝试了这个:

    Dim dev As CanvasDevice = sender.Device
    Dim crt As New CanvasRenderTarget(dev, CSng(sender.ActualWidth), CSng(sender.ActualHeight), sender.Dpi)
    Dim ds As CanvasDrawingSession = crt.CreateDrawingSession
    ds.FillCircle(100, 100, 50, Windows.UI.Colors.Red)

    args.DrawingSession.DrawImage(crt)

这种工作,但当我调整页面大小以强制重绘时,我看到各种奇怪的损坏图像,看起来像撕裂,未初始化的内存等。

发生了什么事,我该如何解决?非常感谢。

4

2 回答 2

1

您只需要在涉及不同图形 API 之间互操作的极少数情况下调用 CanvasDrawingSession.Flush。这对您在这里所做的工作有点作用,但比必要的要贵得多。

问题是您没有处理绘图会话。CreateDrawingSession 的返回值需要在您完成绘制后处理。在 C# 中,这通常是通过“使用”语句完成的,尽管显式调用 Dispose 具有相同的效果。恐怕我对 VB 的了解不够好,无法告知 VB 相当于“使用”是什么。

于 2016-05-23T17:46:52.073 回答
0

好的,想通了,需要在开始时执行 ds.clear 并在 DrawImage 之前执行 ds.flush 以使硬件渲染器实际执行此操作

于 2016-05-17T20:38:15.097 回答