我正在寻找一个 DrawingVisual (示例中的视觉)使用位图 RenderTargetBitmap 考虑将此位图设置为背景 Canvas 如下:

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似乎是要走的路。

有帮助吗?

解决方案

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

您打算如何处理此位图?如果要在WPF应用程序中渲染它,则需要首先将其转换为32BPP格式,因此您可能会使用 更多的 如果您尝试以任何其他格式内部保存内存。 (您将拥有所谓的记忆效率表示 WPF版本实际上能够使用。)更不用说在所选格式和格式WPF之间使用的额外CPU时间可以使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top