我有一个程序将图形文件组合在一个图标中 . 尺寸包括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 回答
是的,你是对的:
结果如下:
看看这里:https://en.wikipedia.org/wiki/ICO_(file_format)