在图标文件中存储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));
}
}
是的,你是对的:
颜色深度小于32位的图像遵循特定的格式:将图像编码为由颜色组成的单个图像(异或蒙版)和不透明度蒙版(与蒙版)[..]
结果是:
[. .每个面具必须具有相同的尺寸和高度BMP头中指定的高度必须是指定高度的两倍在ICONDIRENTRY结构
请看这里:https://en.wikipedia.org/wiki/ICO_(file_format)