Неправильные растровые изображения; как это возможно - PullRequest
1 голос
/ 08 сентября 2011

Я пытаюсь проанализировать номерные знаки с кодом C ++.Дело не в том, как быстро туда добраться, потому что я хочу сам приступить к процессу создания этого кода C ++ и научиться этому.

Проблема:

Байты в файле растрового изображения не складываются!Файл растрового изображения: enter image description here http://ictmdeklerk.nl/cor.bmp

Почему они не суммируются:

Я использую 24-разрядные растровые изображения (* .BMP файлы).Я знаю, что растровое изображение создается с использованием BMPFILEHEADER и BMPINFOHEADER, которые вместе занимают 54 байта.

Теперь изображение имеет ширину 1350 пикселей и высоту 740 пикселей, в результате чего получается 999000 пикселей.

Поскольку файл 24-битный, на пиксель приходится 3 байта.999000 * 3 = 2997000 байт, необходимых для изображения.Но размер изображения (biSizeImage) в BMPINFOHEADER говорит, что изображение составляет 2998480 байт!Размер файла составляет 2.998.534 байта - 54 байта заголовка = 2.998.480.Таким образом, заголовок все еще 54 байта.Никаких дополнительных метаданных там нет.Когда я делю 2.998.480 / 3 байта на пиксель, я получаю 999493,33 пикселей!Это даже не круглое число!

Это сводит меня с ума.Как Windows узнает, как показать это изображение без смещения пикселей, цветов или чего-либо еще?

Может кто-нибудь объяснить, откуда взялись эти дополнительные пиксели / байты?И как с ними бороться?

Заранее спасибо!

1 Ответ

5 голосов
/ 08 сентября 2011

BMP-файлы дополняют каждую строку до 4-байтовых границ.

Ваше изображение

(ширина 1350 пикселей) x (3 байта на пиксель) = 4050 байтов на строку. 4050 не делится на 4, но 4052 равно , поэтому 2 байта для каждой строки (2 * 740 = 1480 байтов) добавляются в качестве отступа к вашему изображению.

Таким образом, размер файла составляет 2997000 байт изображения + 54 байта заголовка + 1480 байт заполнения строки = 2998534 байт, что является фактическим размером файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...