У меня есть программа для объединения графических файлов в значок. Размеры включают 16,24,32,48,256 32bit. Они используют PNG и работают. У меня есть правильный список заголовков и каталогов/индексов.Сохранение BMP в файле значков
Однако, для 8 бит я использую BMP с четырьмя четырьмя байтами заголовка BMP. Эта часть файла значка не работает. Посмотрев значок MS, они снова сохранили BMP с удаленным заголовком из 14 байтов. Глядя на их данные BMP, у них есть второй заголовок, как я, но для 16x16 второй заголовок (BITMAPINFOHEADER) говорит 16x32. Швы BMP имеют ширину в два раза. Зачем? Является ли изображение в два раза шириной с битовой маской или чем-то еще?
Вот мой код (Примечание: изображение 32х32 растровый 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
@ Abion47 Попытка это немного привычка, потому что я сделал много сообщений, где размер неизвестен, но в этом случае да. Я мог бы модифицировать эту часть, чтобы сделать ее более читаемой. Благодарю. – James