rendertargetBitmapでpixelformats.indexedxを使用する方法は?
-
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
?または、画像のメモリフットプリントを減らす他の方法はありますか? 3色しか使用していないため、32ビットRGBではなくパレットを使用すると、道が進むように思われました。
解決
できません。 RenderTargetBitmap
をサポートするだけです Pbgra32
ピクセル形式。これは、WPFのレンダリングシステムがピクセルあたり32ビットで完全に機能するためです。これは、画像を生成する形式であり、レンダリングする場合に画像を好む形式でもあります。 (他の形式でビットマップを提供する場合、最初にピクセル表現ごとに32ビットに変換する必要があります。)
このビットマップで何をするつもりですか? WPFアプリケーションでレンダリングする場合は、最初に32BPP形式に変換する必要があります。 もっと メモリ他の形式で内部的に保持しようとする場合。 (おそらくメモリ効率の高い表現があります と バージョンWPFは実際に動作することができます。)選択した形式とWPFのフォーマットとの間の変換に費やす余分なCPU時間は言うまでもありません。