我希望使用DrawingVisual
将RenderTargetBitmap
(示例中的视觉效果)呈现给位图,并将该位图设置为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似乎是可行的方法。
答案 0 :(得分:12)
你做不到。 RenderTargetBitmap
仅支持Pbgra32
像素格式。那是因为WPF的渲染系统完全以每像素32位的速度工作。这是它生成图像的格式,如果你想渲染它们,它也是它更喜欢图像的格式。 (如果您为其提供任何其他格式的位图,则需要先将其转换为每像素32位的表示。)
你打算用这个位图做什么?如果你想在WPF应用程序中渲染它,在任何情况下都需要首先将其转换为32bpp格式,因此如果你试图在其他任何内部保存它,你可能会冒险使用 more 内存格式。 (您将拥有所谓的内存效率表示和 WPF实际上可以使用的版本。)更不用说在您选择的格式和WPF可以使用的格式之间转换所花费的额外CPU时间。