我有一個程序將圖形文件合併到一個圖標中。尺寸包括16,24,32,48,256 32位。這些使用PNG和工作。我有正確的標題和目錄/索引記錄列表。在圖標文件中存儲BMP
但是,對於8位,我正在使用BMP和BMP的頭部的前14個字節被剝離。這部分圖標文件不起作用。看了一個MS圖標後,他們再次刪除了BMP,並刪除了14個字節的標題。看看他們的BMP數據,他們有我的第二個頭,但對於16x16第二個頭(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));
}
}
'Array.Resize'似乎是不必要的。你可以將數據聲明爲'new byte [imageBytes.Length - 14]'。 – Abion47
@ Abion47嘗試這是一種習慣,因爲我已經做了很多通信,其中大小未知,但在這種情況下是肯定的。我可能會修改該部分以使其更具可讀性。謝謝。 – James