如何将FrameworkElement保存为非常大的光栅图像?

时间:2012-05-14 13:48:27

标签: .net wpf image bitmap frameworkelement

我必须将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)? 感谢。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您将不得不在tile中呈现FrameworkElement。最简单的方法是将Clip属性设置为要渲染的图块的位置/大小,然后使用图块大小的RenderTargetBitmap实例在磁盘上获取该块。现在你可以

  1. 保留原件,并在某种deep-zoom type tiled renderer
  2. 中使用它们
  3. 将它们全部组合(请注意,如果它们不适合在内存中进行渲染,则无法使用ImageMagick's command line / large image support加载'em all all to combined)通过解析文件格式然后编写正确的输出文件来自己动手。
  4. 当然,我不知道选项2是否有任何帮助,因为即使您确实编写了巨大的输出文件 - 如何加载它? :)

    希望这有帮助!