2010-12-03 16 views
4

私は以下のようにCanvasの背景として、このビットマップを設定するには、ビューとRenderTargetBitmapを使用してビットマップにDrawingVisual(例では、視覚)をレンダリングするために探しています:最後の引数としてPixelFormats.Defaultを使用する場合RenderTargetBitmapでPixelFormats.IndexedXを使用するには?

var bmp = new RenderTargetBitmap(2000, 50, 120, 96, PixelFormats.Indexed2); 
bmp.Render(visual); 
var brush = new ImageBrush(bmp) { Stretch = Stretch.Fill }; 
Canvas.Background = brush; 

RenderTargetBitmapに設定すると、イメージは期待どおりレンダリングされます。しかし、PixelFormats.Indexed2(またはPixelFormats.IndexedXのいずれか)を選択した場合、私のコードは例外なくメソッドを終了するようですが、bmp.Render行は呼び出されないため、画像はCanvasに表示されません。

ピクセル形式IndexedXの使用方法RenderTargetBitmap?または、イメージのメモリフットプリントを減らす他の方法はありますか?それは3色しか使用しないので、32ビットRGBではなくパレットを使用することがやりがいのようでした。

答えて

9

できません。 RenderTargetBitmapは、Pbgra32ピクセル形式のみをサポートしています。これは、WPFのレンダリングシステムが完全に32ビット/ピクセルで動作するためです。これはイメージを生成する形式であり、イメージをレンダリングしたい場合は、イメージを格納する形式です。 (他の形式のビットマップを提供する場合は、最初に32ビット/ピクセル表現に変換する必要があります)。

このビットマップで何をする予定ですか? WPFアプリケーションでレンダリングしたい場合は、最初に32bpp形式に変換する必要があります。他の形式で内部的に保持しようとすると、より多くのメモリが使用される可能性があります。 WPFが実際に動作できるバージョンは、というメモリ効率の良い表現になります。選択した書式とWPF形式の間で変換するのに費やされる余分なCPU時間はもちろんです。

+0

Ianの情報をありがとう、私はそのイメージがレンダリングプロセスのある時点でPbgra32としてメモリに保持されていなければならないことを認識しませんでした。私は余分なメモリ使用量で生きなければならないように見えます。 –

+0

興味深いことに、ビットマップはスクロール可能なチャートを提供するためにスクロールビューワに入っています。私はベクトル描画から欲しいパフォーマンスを得ることができなかったので、ビットマップに頼った。 –

+0

それから、なぜエラーメッセージはそう言っていないのですか? –