Frage

Ich suche eine DrawingVisual (visuell im Beispiel) in eine Bitmap mit der Ansicht mit RenderTargetBitmap zu machen diese Bitmap gesetzt als Hintergrund zu einem Canvas wie folgt:

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

Wenn PixelFormats.Default als letztes Argument zu RenderTargetBitmap verwenden, rendert das Bild wie erwartet. Allerdings, wenn ich PixelFormats.Indexed2 (oder eine der PixelFormats.IndexedX) wählen, mein Code die Methode ohne Ausnahme zu verlassen scheint, wird die bmp.Render Linie nie aufgerufen und damit das Bild nicht auf dem Canvas angezeigt.

Wie die IndexedX Pixelformate mit RenderTargetBitmap benutzen? Oder gibt es andere Möglichkeiten, um den Speicherbedarf des Bildes zu reduzieren? Es verwendet nur drei Farben, also eine Palette mit eher als 32-Bit-RGB den Weg schienen zu gehen.

War es hilfreich?

Lösung

Sie können nicht. RenderTargetBitmap unterstützt nur das Pbgra32 Pixelformat. Das ist, weil WPF Rendering-System arbeitet vollständig in 32 Bit pro Pixel. Das ist das Format, in dem es Bilder erzeugt, und es ist auch das Format, in dem sie es vorzieht, Bilder in sein, wenn Sie wollen, dass sie zu machen. (Wenn Sie es mit einem Bitmap in einem anderen Format zur Verfügung stellen, wird es in einen 32-Bit konvertieren muß pro-Pixel-Darstellung zuerst.)

Was planen Sie mit diesem Bitmap zu tun? Wenn Sie es in einer WPF-Anwendung machen möchten, werden es brauchen zunächst in jedem Fall zu einem 32bpp Format konvertiert werden, so dass Sie Risiko mit mehr Speicher, wenn Sie versuchen, es zu halten intern in jedem anderen Format. (Sie werden Ihre vermeintlich speichereffiziente Darstellung haben und die Version WPF tatsächlich in der Lage zu arbeiten.) Nicht die zusätzliche CPU-Zeit zu erwähnen, zwischen dem gewählten Format und ein Format ausgegeben Umwandlung kann WPF mit arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top