5

以下のように、このビットマップを a の背景として設定するビューをDrawingVisual使用して、a (例ではビジュアル) をビットマップにレンダリングしようとしています。RenderTargetBitmapCanvas

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 ではなくパレットを使用する方法が適しているように思われました。

4

1 に答える 1

16

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

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

于 2010-12-03T09:04:17.360 に答える