如何防止VS从8 bpp原始图像设置为32ARGB位图

时间:2012-04-02 18:44:57

标签: c# bitmap pixelformat

将8 bpp的PNG添加到资源文件中。 如果您尝试使用它,例如:

Bitmap bmp = properties.Resources.My8bppImage;

bmp PixelFormat将是32 ARGB!但这是错误的,它应该是8 bpp索引。 如何获得正确的位图?

1 个答案:

答案 0 :(得分:2)

这里没有很多选项,Visual Studio资源编辑器和Bitmap类都使用PNG解码器将图像转换为32bpp。这是有帮助的,32bpp渲染得很好而且很快。

后备选项是使用System.Windows.Media.Imaging.PngBitmapDecoder类。您可以将BitmapCreateOptions.PreservePixelFormat选项传递给它并强制它保持8bpp格式。您可以将png作为资源添加,首先将其重命名为.bin文件,这样它就不会尝试将其解释为图像文件,而是将其作为byte []。然后像这样的代码将起作用:

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程序集的引用。