Как запретить 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.

Другие вопросы по тегам