如何在RenderTargetBitmap中使用PixelFormats.IndexedX?

时间:2010-12-03 01:16:34

标签: wpf rendertargetbitmap pixelformat

我希望使用DrawingVisualRenderTargetBitmap(示例中的视觉效果)呈现给位图,并将该位图设置为Canvas的背景,如下所示:< / p>

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

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

1 个答案:

答案 0 :(得分:12)

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

你打算用这个位图做什么?如果你想在WPF应用程序中渲染它,在任何情况下都需要首先将其转换为32bpp格式,因此如果你试图在其他任何内部保存它,你可能会冒险使用 more 内存格式。 (您将拥有所谓的内存效率表示 WPF实际上可以使用的版本。)更不用说在您选择的格式和WPF可以使用的格式之间转换所花费的额外CPU时间。