2012-04-02 6 views

Antwort

2

Sie haben hier nicht viele Optionen. Sowohl der Visual Studio-Ressourceneditor als auch die Bitmap-Klasse verwenden einen PNG-Decoder, der das Bild in 32-Bit-Auflösung konvertiert. Dies soll hilfreich sein, 32bpp macht schön und schnell.

Die Fallback-Option besteht darin, die System.Windows.Media.Imaging.PngBitmapDecoder-Klasse zu verwenden. Sie können die BitmapCreateOptions.PreservePixelFormat-Option übergeben und erzwingen, dass das 8bpp-Format beibehalten wird. Sie können das PNG als Ressource hinzufügen, indem Sie es beispielsweise in eine .bin-Datei umbenennen, damit es nicht als Bilddatei interpretiert wird, sondern zu einem byte [] wird. Dann funktioniert der folgende Code:

using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.IO; 
... 
     Stream stream = new MemoryStream(Properties.Resources.marble8); 
     PngBitmapDecoder decoder = new PngBitmapDecoder(stream, 
      BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); 
     BitmapSource bitmapSource = decoder.Frames[0]; 

Wo "marmor8" das von mir verwendete Testbild war, ersetzen Sie Ihr eigenes. Sie müssen Verweise auf die WindowsBase- und PresentationCore-Assemblys hinzufügen.

+0

Das ist traurig ... Nun, vielen Dank. :) – Pedro77

+0

Eigentlich ist das falsch; Die Bitmap-Klasse ändert nur Png-Bilder auf 32 Bit, wenn sie Transparenz enthalten. Ich habe ein paar Nachforschungen zu diesem seltsamen Verhalten angestellt und eine Workaround gefunden (https://stackoverflow.com/a/43137699/395685). – Nyerguds

Verwandte Themen