我必须将FrameworkElement保存为非常大的光栅图像。现在,我以这种方式使用RenderTargetBitmap类和BitmapEncoder:
RenderTargetBitmap bmp = new RenderTargetBitmap(ElementWidth, ElementHeight,
90, 96, PixelFormats.Default);
bmp.Render(MyElement); // OutOfMemoryException here
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (var stream = File.Create(filePath))
{ encoder.Save(stream); }
ElementWidth和ElementHeight是大数(大约10000x6000)。但是当我尝试Render我的元素时,使用此解决方案会出现OutOfMemoryException。
还有其他方法可以做我需要的(不会导致OutOfMemoryException)? 感谢。
答案 0 :(得分:1)
在这种情况下,您将不得不在tile中呈现FrameworkElement。最简单的方法是将Clip属性设置为要渲染的图块的位置/大小,然后使用图块大小的RenderTargetBitmap实例在磁盘上获取该块。现在你可以
当然,我不知道选项2是否有任何帮助,因为即使您确实编写了巨大的输出文件 - 如何加载它? :)
希望这有帮助!