#c #windows #winapi #bitmap #bmp
#c #Windows #winapi #растровое изображение #bmp
Вопрос:
Я пытаюсь понять построение bmp на основе необработанных данных на c , и у меня есть несколько вопросов.
Мой bmp может быть черно-белым, поэтому я решил, что в поле бит на пиксель я должен выбрать 1. Однако во многих руководствах я вижу, что поле заполнения добавляет количество битов для сохранения 32-битного выравнивания, что означает, что мой bmp будет иметь тот же размер файла, что и bmp 24 бит на пиксель.
Правильно ли это понимание или каким-то образом 1 бит на пиксель меньше, чем 24, 32 и т.д.?
Спасибо
Комментарии:
1. Заполнение выполняется для каждой строки развертки, а не для каждого пикселя.
Ответ №1:
Монохромные растровые изображения также выровнены, но они не будут занимать столько места, как изображения с разрешением 24/32 бит / с.
- Строка 24-битного растрового изображения шириной 5 пикселей займет 16 байт: 5 * 3 = 15 для пикселей и 1 байт заполнения.
- Строка 32-битного растрового изображения шириной 5 пикселей займет 20 байт: 5 * 4 = 20 для пикселей, заполнение не требуется.
- Строка монохромного растрового изображения шириной 5 пикселей займет 4 байта: 1 байт для пикселей (невозможно использовать меньше байта, поэтому берется целый байт, но 3 из его 8 бит не используются) и 3 байта заполнения.
Таким образом, монохромное растровое изображение, конечно, будет меньше 24-битного.
Ответ №2:
Ответ уже дан выше (что строки растрового изображения выровнены / дополнены до 32-битной границы), однако, если вам нужна дополнительная информация, вы можете прочитать DIB и их использование, раздел «Заголовок DIB» — в нем подробно объясняется.
Каждая строка сканирования выровнена по DWORD. Строка сканирования буферизуется для выравнивания; буферизация не обязательно равна 0.
Строки сканирования хранятся в перевернутом виде, причем первое сканирование (сканирование 0) в памяти является самым нижним сканированием изображения. (См. Рис. 1.) Это еще один артефакт совместимости с менеджером презентаций. GDI автоматически инвертирует изображение во время операций Set и Get. Рис. 1. (Встроенное изображение, показывающее представления памяти и экрана.)