我需要使用RenderTargetBitmap存储一个大的Visual作为位图图像,而不会获得Out-Of-Memory异常。实现这一目标的最佳方法是什么?
我可以毫不费力地存储视觉屏幕的大小(假设是1920x1200像素),但是当视觉效果非常大(20000x20000像素)时会发生崩溃。
也许没有使用RenderTargetBitmap?有其他选择吗?
注意:最终商店目标是一个文件,有损.jpg或无损.png。
答案 0 :(得分:2)
20000 x 20000像素= 400000000像素。每像素4个字节= 1.5 Gb(未压缩数据)
这太大了。
我会创建多个图像并拼接它们或使用更小的图像并将它们用作图块。
答案 1 :(得分:2)
您是否考虑过创建XPS文档? Convert WPF (XAML) Control to XPS Document 基本上,您可以使用可视元素并将其转储到Microsoft的PDF版本中 - 标准查看器现在通常安装在盒子上,并且内置在Win 7中。 XPS文档的优点是它是基于矢量的,所以它只是存储绘图指令。 (您可以看到如何将XPS文档重命名为ZIP并解压缩。)
如果您的视觉效果中已嵌入了较大的光栅类型图像,则可能无效,但需要尝试。