首页 文章

在图标文件中存储BMP

提问于
浏览
-1

我有一个程序将图形文件组合在一个图标中 . 尺寸包括16,24,32,48,256 32bit . 这些使用PNG并且有效 . 我有正确的 Headers 和目录/索引记录列表 .

但是,对于8位我使用BMP剥离了BMP标头的前14个字节 . 这部分图标文件不起作用 . 看了一个MS图标,他们再次存储了BMP,并删除了14个字节的 Headers . 看看他们的BMP数据他们有第二个 Headers ,但对于16x16,第二个 Headers (BITMAPINFOHEADER)表示16x32 . BMP接缝宽度的两倍 . 为什么?图像是宽度的两倍,带有位掩码还是什么?

这是我的代码:(注意图像传递时为32位32位32位 . )

using (Bitmap imageAsBitmap = new Bitmap(image))
{
    int colorCount = 0;
    using (Bitmap bitmap = imageAsBitmap.ColourReduction256(out colorCount))
    {
        byte[] imageBytes = new byte[] { };
        using (MemoryStream ms = new MemoryStream())
        {
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
            imageBytes = ms.ToArray();
        }
        byte[] data = new byte[] { };
        Array.Resize(ref data, imageBytes.Length - 14);
        Array.Copy(imageBytes, 14, data, 0, data.Length);
        enteries.Add(new IconEntry(data, image.Width, image.Height, 8));
    }
}

1 回答

  • 1

    是的,你是对的:

    颜色深度小于32位的图像遵循特定格式:图像编码为由彩色遮罩(“XOR遮罩”)和不透明遮罩(“AND遮罩”)组成的单个图像 . ]

    结果如下:

    [..]掩模必须各自具有相同的尺寸,并且BMP Headers 中指定的高度必须恰好是ICONDIRENTRY结构中指定高度的两倍

    看看这里:https://en.wikipedia.org/wiki/ICO_(file_format)

相关问题