2010-12-03 116 views
4

我期待呈現DrawingVisual(在示例性視覺)使用RenderTargetBitmap與視圖的位圖來設置該位圖作爲背景的Canvas如下:如何將PixelFormats.IndexedX與RenderTargetBitmap一起使用?

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

如何在RenderTargetBitmap上使用IndexedX像素格式?還是有其他方法可以減少圖像的內存佔用量?它只使用三種顏色,因此使用調色板而不是32位RGB似乎是一種方法。

回答

9

你不能。 RenderTargetBitmap只支持Pbgra32像素格式。這是因爲WPF的渲染系統完全以每像素32位工作。這是它生成圖像的格式,如果要渲染它,它也是喜歡圖像的格式。 (如果您以任何其他格式提供位圖,則需要先將其轉換爲每像素32位表示形式。)

您打算如何處理此位圖?如果您想在WPF應用程序中呈現它,則無論如何都需要首先將其轉換爲32bpp格式,因此如果您試圖以任何其他格式內部保存內存,則可能會冒更多內存的風險。 (你會有你想要的內存高效表示 WPF的版本實際上可以使用。)更不用說在選擇的格式和WPF可以使用的格式之間花費額外的CPU時間。

+0

感謝您的信息伊恩,我沒有意識到這個圖像必須在渲染過程中的某個點在內存中保存爲Pbgra32。看起來我將不得不忍受額外的內存使用。 – 2010-12-07 00:13:01

相關問題