Высота BITMAPINFOHEADER в два раза больше, чем я ожидаю

#c #winapi #icons #ico

#c #winapi #Значки #ico

Вопрос:

Я пишу приложение на C для анализа файлов значков Windows (ICO).

Когда я читаю в BITMAPINFOHEADER структуре для существующей записи icon, все переменные внутри структуры содержат ожидаемые значения, за исключением того, что biHeight , которое должно содержать высоту изображения в пикселях, всегда в два раза больше, чем должно быть.

Так, например, если у меня есть значок 64×64, biWidth равно 64, но biHeight равно 128.

Это ожидаемое поведение? Я впервые имею дело с BITMAPINFOHEADER .

В основном я опираюсь на статью MSDN о BITMAPINFOHEADER.

Ответ №1:

Да, это нормально. Это добавленная высота растровой маски «И» и растровой маски «XOR», поэтому для любого обычного значка это просто в 2 раза больше высоты значка. (Эти маски больше не используются для 32-разрядных значков; они являются пережитком.) Просто разделите на два.

Комментарии:

1. Значок должен содержать допустимую маску XOR, пользователи не работают со скоростью 32 бит / с в 100% случаев (или также включают изображения с меньшей разрядностью)

2. Смотрите второй абзац в этом разделе Википедии для получения некоторого официального подтверждения этого ответа.