Монохромное растровое изображение (1 bbp) Заполнение и дополнительный байт 0xF0
Я работаю с монохромным растровым изображением, 1 бит на пиксель.
Когда я проверяю файл в шестнадцатеричном редакторе, я замечаю, что каждая строка заканчивается следующей шестнадцатеричной последовательностью: f0 00 00 00
,
Немного изучив проблему, я пришел к выводу, что три последних байта 00 00 00
соответствуют отступам строки.
Вопрос 1:
Я хотел бы знать, корректен ли следующий алгоритм для определения количества байтов заполнения в случае изображения BMP 1 bbp:
if(((n_width % 32) == 0) || ((n_width % 32) > 24))
{
n_nbPaddingBytes = 0;
}
else if((n_width % 32) <= 8)
{
n_nbPaddingBytes = 3;
}
else if((n_width % 32) <= 16)
{
n_nbPaddingBytes = 2;
}
else
{
n_nbPaddingBytes = 1;
}
n_width
ширина в пикселях изображения BMP.
Например, если n_width = 100 px, тогда n_nbPaddingBytes = 3.
Вопрос 2:
Помимо прокладки (00 00 00), у меня есть это F0
байт, предшествующий заполнению тремя байтами в каждой строке. Это приводит к черной вертикальной линии 4 пикселя на правой стороне изображения.
Примечание 1: я манипулирую изображением до его печати на принтере Zebra (я переворачиваю изображение по вертикали и меняю цвета: в основном черный пиксель становится белым, и наоборот).
Примечание 2: Когда я открываю исходное изображение BMP с помощью Paint, у него нет такой черной вертикальной линии с правой стороны.
Есть ли причина, по которой этот байт 0xF0 присутствует в конце каждой строки?
Спасибо за помощь. С наилучшими пожеланиями.
1 ответ
Биты, представляющие пиксели растрового изображения, упакованы в строки. Размер каждой строки округляется до кратного 4 байта (32-битный DWORD) путем заполнения.
RowSize = [(BitsPerPixel * ImageWidth + 31) / 32] * 4
(деление целое)
Монохромное изображение с шириной = 100 имеет размер строки 16 байтов (128 бит), поэтому 3,5 байта служат для заполнения (второй фрагмент F0 и 00 00 00). F
представляет 4 столбца изображения справа (белый для обычной палитры 0/1).