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.
Können Sie Code anzeigen? –