2015-04-02 3 views
0

Я работаю с монохромным растровым изображением, 1 бит на пиксель.Монохромный битмап (1 бит) Заполнение и дополнительный 0xF0 байт

Когда я просматриваю файл с шестнадцатеричным редактором, я замечаю, что каждая строка заканчивается следующей шестнадцатеричной последовательностью: f0 00 00 00.

Изучив проблему немного, я пришел к выводу, что три последних байта 00 00 00 соответствуют заполнению строки.

Вопрос 1:

Я хотел бы знать, если следующий алгоритм для определения количества заполняющих байтов в случае 1 ББП BMP изображение правильно:

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 точки, то 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 (деление целочисленное)

(BMP file format)

Монохромное изображение с шириной = 100 имеет размер строки 16 байт (128 бит), таким образом 3,5 байта служат для заполнения (второй полубайт F0 и 00 00 00). F представляет собой правый 4 столбца изображения (белый для обычной палитры 0/1).

+0

Благодарим вас за ответ. В самом деле? Количество байтов для заполнения может быть плавающей? Поэтому я предполагаю, что алгоритм, который я предлагаю, неверен, не так ли? –

+1

Нет, я считаю эффективными байты заполнения - ваши 100 пикселей занимают 100 бит = 12 1/2 байта, поэтому я написал около 3.5 – MBo

Смежные вопросы