0

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

Bitmap bmp = properties.Resources.My8bppImage;

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

4

1 回答 1

2

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

后备选项是使用 System.Windows.Media.Imaging.PngBitmapDecoder 类。您可以将 BitmapCreateOptions.PreservePixelFormat 选项传递给它并强制它保持 8bpp 格式。您可以通过首先将 png 重命名为 .bin 文件来将 png 添加为资源,这样它就不会尝试将其解释为图像文件,而是将其设为 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 程序集的引用。

于 2012-04-02T20:54:40.337 回答