如何将pixelformats.indexedx与RenderTargetBitMap一起使用?
-
30-09-2019 - |
题
我正在寻找一个 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时间可以使用。
不隶属于 StackOverflow