【问题标题】:UWP/Win2D - save drawing in memoryUWP/Win2D - 将绘图保存在内存中
【发布时间】:2016-10-19 12:41:15
【问题描述】:

一个代码示例会很好,但是对于处理这种情况的最佳方法提供一些通用建议就足够了。

我正在 Win2D 画布上渲染图像。该图像首先由拼凑平铺位图以形成大图像组成。我将其称为“基础图像”。

然后我使用各种“绘制”调用来标记基本图像,并且我还在基本图像上放置其他位图,以创建最终图像。

用户可以向任何方向滚动图像和/或放大和缩小图像。跟踪鼠标移动并在画布上显示类似工具提示的信息,为用户提供详细信息。每次用户做任何影响图像的事情时,我都会重新绘制整个图像。在某些情况下,基本图像由多达 46,000 个微小位图组成。

即使使用这种粗暴的方法,图像也会很快自行重绘,但这感觉是最糟糕的做法。

我的直觉告诉我,我应该渲染一次基础图像,将其保存在内存中,然后根据需要将其复制到画布上。之后,覆盖必要的位以完成图像。我找不到任何建议如何为此目的保留内存位图的材料。我也不知道这是否是最合适的方法。

对于最合适的行动方案的任何指导或建议将不胜感激。

保罗

【问题讨论】:

    标签: uwp win2d


    【解决方案1】:

    您的直觉就在这里 - 您很可能通过仅绘制一次图像然后重用它的缓存版本来获得巨大的性能提升。

    CanvasRenderTarget 是解决此问题的方法:查看 https://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_CanvasRenderTarget.htmhttps://microsoft.github.io/Win2D/html/Offscreen.htm 作为起点。

    【讨论】:

    • 我想我以前看过 CanvasRenderTarget 类,但是“屏幕外”的文章突然变得有意义了。我试试看。
    • 这看起来可以正常工作。我可以轻松地将生成的位图构建到“屏幕外”资源,然后将我需要的部分复制到我的屏幕资源。我发现了一个限制。屏幕外图像的最大宽度(我也假设高度)不能超过 16384。实际错误是“此设备的 MaximumBitmapSizeInPixels 为 16384”。这大约是我需要的大小的 1/4,但限制也告诉我,我试图创建的基本大小太大而无法合理。
    • 请注意,16384*16384 位图(假设为 32 位彩色格式)为 1 GB,因此即使 GPU 硬件能够支持如此大的图像,您也会很快耗尽内存!
    • 同意。这是动态构建图像的优势的一部分。构建的图像永远不会大于屏幕上呈现的图像。我应该能够提出一些体面的折衷方案,但这会给我我正在寻找的性能,而不会完全消耗内存。
    猜你喜欢
    • 2016-07-23
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多