2010-12-03 94 views
4

我期待呈现DrawingVisual(在示例性视觉)使用RenderTargetBitmap与视图的位图来设置该位图作为背景的Canvas如下:如何将PixelFormats.IndexedX与RenderTargetBitmap一起使用?

var bmp = new RenderTargetBitmap(2000, 50, 120, 96, PixelFormats.Indexed2); 
bmp.Render(visual); 
var brush = new ImageBrush(bmp) { Stretch = Stretch.Fill }; 
Canvas.Background = brush; 

当使用PixelFormats.Default作为最后一个参数到RenderTargetBitmap,图像按预期呈现。然而,当我选择PixelFormats.Indexed2(或任何PixelFormats.IndexedX),我的代码似乎退出该方法没有例外,bmp.Render行不会被调用,因此图像不显示在Canvas

如何在RenderTargetBitmap上使用IndexedX像素格式?还是有其他方法可以减少图像的内存占用量?它只使用三种颜色,因此使用调色板而不是32位RGB似乎是一种方法。

回答

9

你不能。 RenderTargetBitmap只支持Pbgra32像素格式。这是因为WPF的渲染系统完全以每像素32位工作。这是它生成图像的格式,如果要渲染它,它也是喜欢图像的格式。 (如果您以任何其他格式提供位图,则需要先将其转换为每像素32位表示形式。)

您打算如何处理此位图?如果您想在WPF应用程序中呈现它,则无论如何都需要首先将其转换为32bpp格式,因此如果您试图以任何其他格式内部保存内存,则可能会冒更多内存的风险。 (你会有你想要的内存高效表示 WPF的版本实际上可以使用。)更不用说在选择的格式和WPF可以使用的格式之间花费额外的CPU时间。

+0

感谢您的信息伊恩,我没有意识到这个图像必须在渲染过程中的某个点在内存中保存为Pbgra32。看起来我将不得不忍受额外的内存使用。 – 2010-12-07 00:13:01

相关问题