【发布时间】:2016-10-03 10:22:30
【问题描述】:
我有一个程序可以将图形文件合并到一个图标中。尺寸包括 16,24,32,48,256 32bit。这些使用PNG并且可以工作。我有正确的标题和目录/索引记录列表。
但是,对于 8 位,我使用的是 BMP,其中剥离了 BMP 标头的前 14 个字节。这部分图标文件不起作用。在查看了 MS 图标后,他们再次存储了 BMP,并删除了 14 字节的标头。查看他们的 BMP 数据,他们有第二个标题,但对于 16x16,第二个标题 (BITMAPINFOHEADER) 表示 16x32。 BMP 接缝是宽度的两倍。为什么?图像宽度是位掩码的两倍还是什么?
这是我的代码:(注意图像是 32x32 位图 32bit 传递时。)
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));
}
}
【问题讨论】:
-
Array.Resize似乎没有必要。您可以将数据声明为new byte[imageBytes.Length - 14]。 -
@Abion47 尝试一下这是一种习惯,因为我做了很多不知道大小的通信,但在这种情况下是的。我可能会修改那部分以使其更具可读性。谢谢。
标签: c# icons file-format