Как запретить VS устанавливать значение 32ARGB для растрового изображения из исходного изображения размером 8 бит / с - PullRequest
0 голосов
/ 02 апреля 2012

Добавьте PNG размером 8 бит / с в файл ресурсов. Если вы попытаетесь использовать его, как:

Bitmap bmp = properties.Resources.My8bppImage;

BMP PixelFormat будет 32 ARGB! Но это неправильно, оно должно быть 8 bpp проиндексировано. Как получить правильное изображение?

1 Ответ

2 голосов
/ 03 апреля 2012

У вас не так много вариантов, и редактор ресурсов Visual Studio, и класс Bitmap используют PNG-декодер, который преобразует изображение в 32 бит / дюйм.Это должно быть полезно, 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.

...