在图标文件中存储BMP

本文关键字:存储 BMP 文件 图标 | 更新日期: 2023-09-27 18:11:20

我有一个程序来组合图形文件在一个图标。大小包括16、24、32、48、256 32位。这些使用PNG和works。我有正确的标题和目录/索引记录列表。

然而,对于8位,我使用BMP,剥离BMP头部的前14个字节。图标文件的这一部分不起作用。在查看了MS图标后,他们删除了14字节的头文件,重新存储了BMP。看看他们的BMP数据,他们和我一样有第二个报头,但是对于16 × 16,第二个报头(BITMAPINFOHEADER)是16 × 32。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));
    }
}

在图标文件中存储BMP

是的,你是对的:

颜色深度小于32位的图像遵循特定的格式:将图像编码为由颜色组成的单个图像(异或蒙版)和不透明度蒙版(与蒙版)[..]

结果是:

[. .每个面具必须具有相同的尺寸和高度BMP头中指定的高度必须是指定高度的两倍在ICONDIRENTRY结构

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