在图标文件中存储 BMP
Storing BMP in icon file
我有一个程序可以将图形文件合并到一个图标中。大小包括 16、24、32、48、256 32 位。这些使用 PNG 和作品。我有正确的 header 和 directory/index 记录列表。
然而,对于 8 位,我使用 BMP,其中 header 的前 14 个字节被剥离。这部分图标文件不起作用。查看 MS 图标后,他们再次存储了 BMP,并删除了 14 字节 header。查看他们的 BMP 数据,他们有第二个 header 和我一样,但对于 16x16,第二个 header (BITMAPINFOHEADER) 表示 16x32。 BMP 接缝宽度的两倍。为什么?图像宽度的两倍是否带有位掩码或其他东西?
这是我的代码:(注意图像在传递时是 32x32 位图 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));
}
}
是的,你是对的:
Images with less than 32 bits of color depth follow a particular
format: the image is encoded as a single image consisting of a color
mask (the "XOR mask") together with an opacity mask (the "AND mask")[..]
结果是:
[..] the masks must each be of the same dimensions, and the height
specified in the BMP header must be exactly twice the height specified
in the ICONDIRENTRY structure
我有一个程序可以将图形文件合并到一个图标中。大小包括 16、24、32、48、256 32 位。这些使用 PNG 和作品。我有正确的 header 和 directory/index 记录列表。
然而,对于 8 位,我使用 BMP,其中 header 的前 14 个字节被剥离。这部分图标文件不起作用。查看 MS 图标后,他们再次存储了 BMP,并删除了 14 字节 header。查看他们的 BMP 数据,他们有第二个 header 和我一样,但对于 16x16,第二个 header (BITMAPINFOHEADER) 表示 16x32。 BMP 接缝宽度的两倍。为什么?图像宽度的两倍是否带有位掩码或其他东西?
这是我的代码:(注意图像在传递时是 32x32 位图 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));
}
}
是的,你是对的:
Images with less than 32 bits of color depth follow a particular format: the image is encoded as a single image consisting of a color mask (the "XOR mask") together with an opacity mask (the "AND mask")[..]
结果是:
[..] the masks must each be of the same dimensions, and the height specified in the BMP header must be exactly twice the height specified in the ICONDIRENTRY structure