5

我正在寻找使用视图将此位图设置为背景的DrawingVisual位图(在示例中为视觉对象),如下所示:RenderTargetBitmapCanvas

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.IndexedXbmp.RenderCanvas

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

4

1 回答 1

16

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

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

于 2010-12-03T09:04:17.360 回答