Странные шестнадцатеричные числа в файле BMP

У меня странная вещь в файлах BMP GRAPHICS.

Я создаю их с помощью FULLSHOT 9 (программа для захвата экрана) (просто щелкните мышью + перетащите прямоугольник на экран и сохраните как ФАЙЛ .bmp).

Когда я смотрю файл в двоичном редакторе, я вижу, что пиксель используется в течение долгого времени, как и ожидалось.

Итак, вы видите что-то вроде этого:

(редактор показывает 8 шестнадцатеричных чисел в строке) (пиксель = 3 шестнадцатеричных числа, например «ED ED ED»)

0x00002f0 ‹---- некоторое смещение от начала файла (долго прошедшая часть заголовка bmp-файла, после которой я ожидаю только длинную последовательность пикселей, а не какую-то дополнительную информацию)

ED  ED  ED  ED  ED  ED  ED  ED
ED  ED  ED  ED  ED  ED  ED  ED
ED  ED  ED  ED  ED  ED  ED  ED
ED  ED  ED  ED  ED  ED  ED  ED

Но вдруг вы видите блок обычных (например, Pixel = 3 шестнадцатеричных чисел), но не повторяющихся чисел.

EF  EF  EF
F0  F0  F0
F2  F2  F2
F3  F3  F3
F5  F5  F5
F7  F7  F7
F8  F8  F8
FA  FA  FA
FB  FB  FB
FD  FD  FD

(для ясности я сделал новую строку после каждой группы из 3.... двоичный редактор показывает 8 шестнадцатеричных чисел подряд)

я подозреваю, что это не настоящие пиксели, а некоторая «информация». Тогда часто вы видите только странный 0.

00  <----i suspect a terminator of some sort.

затем "информационная" часть продолжается...

but now (most of the time) in reverse order
FD  FD  FD
FB  FB  FB
FA  FA  FA ..etc

и стопы, и новый дооооолгой повтор пикселей.

DC  DC  DC  DC  DC  DC  DC  DC  
DC  DC  DC  DC  DC  DC  DC  DC  
DC  DC  DC  DC  DC  DC  DC  DC  
DC  DC  DC  DC  DC  DC  DC  DC  
DC  DC  DC  DC  DC  DC  DC  DC  

ПРОБЛЕМА: эти блоки «информации» мешают мне собрать все реальные пиксели. Если бы я знал, что это такое, я бы сказал программе пропустить их.

ВОПРОС 1: Что может означать эта «информационная» часть?

ВОПРОС 2: Действительно ли ноль является терминатором?

PS Я измерил разницу между повторяющимися нулями, и она обычно кратна «с растровым изображением» в разных файлах .bmp, которые я создал и исследовал.


person Mehmet Elliyasa    schedule 15.08.2013    source источник


Ответы (1)


Вся необходимая информация находится в Википедии в формате BMP.

0x00002f0 ‹---- некоторое смещение от начала файла (долго прошедшая часть заголовка bmp-файла, после которой я ожидаю только длинную последовательность пикселей, а не какую-то дополнительную информацию)

Вы не указываете, в какой позиции вы найдете это значение, но, вероятно, это начало необработанных данных пикселей:

Заголовок растрового файла

..

000Ah 4 байта смещение, т. е. начальный адрес байта, в котором можно найти данные растрового изображения (массив пикселей).

Q1. Информация, судя по всему, просто палитра. Для растрового изображения с истинным цветом необязательно содержать явную палитру, но опять же оно может ее иметь. Теоретически это будет оптимизированная 8-битная палитра для того же изображения, но я бы на это не рассчитывал. Часть, которую вы показываете, представляет собой простой список оттенков серого.

Q2. Эти нули могут быть дополнением строки DWORD. Они встречаются при кратности ширины растрового изображения, потому что каждая строка в вашем изображении фактически занимает кратное байтам ширины растрового изображения — 3 раза для RGB, 4 раза для RGBA. Только в конце строки вставляются нули, чтобы убедиться, что следующая строка начинается с границы DWORD.

person Jongware    schedule 28.08.2013