Как запретить VS устанавливать 32ARGB для растрового изображения из исходного изображения 8 бит / с
Добавьте PNG 8 bpp в ваш файл ресурсов. Если вы попытаетесь использовать его, например:
Bitmap bmp = properties.Resources.My8bppImage;
PixelFormat bmp будет 32 ARGB! Но это неправильно, он должен быть проиндексирован на 8 bpp. Как получить правильный Bitmap?
1 ответ
Здесь у вас не так много опций, и редактор ресурсов Visual Studio, и класс Bitmap используют PNG-декодер, который преобразует изображение в 32bpp. Это должно быть полезно, 32bpp рендерит красиво и быстро.
Резервным вариантом является использование класса System.Windows.Media.Imaging.PngBitmapDecoder. Вы можете передать ему параметр BitmapCreateOptions.PreservePixelFormat и заставить его сохранить формат 8bpp. Вы можете добавить png в качестве ресурса, сначала переименовав его, скажем, в файл.bin, чтобы он не пытался интерпретировать его как файл изображения, а сделал его байтом []. Тогда код, подобный этому, будет работать:
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];
Где "marble8" было тестовым изображением, которое я использовал, замените свое собственное. Вам нужно будет добавить ссылки на сборки WindowsBase и PresentationCore.