Странные шестнадцатеричные числа в файле BMP
У меня есть странная вещь в файлах BMP GRAPHICS.
Я создаю их с помощью FULLSHOT 9 (программа для захвата экрана) (просто щелкните мышью + перетащите прямоугольник на экране и сохраните как.bmp ФАЙЛ).
Когда я смотрю файл в бинарном редакторе, я вижу, как пиксель используется в течение долгого времени, как и ожидалось.
Итак, вы видите что-то вроде этого:
(редактор показывает 8 шестнадцатеричных чисел в строке)(Pixel = 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, которые я создал и исследовал.
1 ответ
Вся необходимая информация находится в Википедии в формате BMP.
0x00002f0 <---- некоторое смещение от начала файла (давно прошедшая часть заголовка файла bmp, после которой я ожидаю только длинную последовательность пикселей, а не некоторую дополнительную информацию)
Вы не упоминаете, в какой позиции вы находите это значение, но это, вероятно, начало необработанных данных пикселей:
Заголовок растрового файла
..
000Ah 4 байта смещения, т.е. начального адреса, байта, в котором можно найти данные растрового изображения (массив пикселей).
Q1. "Информация", судя по всему, просто палитра. Не требуется, чтобы растровое изображение истинного цвета содержало явную палитру, но, опять же, оно может иметь ее. Теоретически, это будет оптимизированная 8-битная палитра для того же изображения, но я бы на это не рассчитывал. Часть, которую вы показываете, представляет собой простой список серых.
Q2. Эти нули могут быть дополнением строки DWORD. Они встречаются в "кратных ширине растрового изображения", потому что каждая строка в вашем изображении занимает, по сути, "кратные байты ширины растрового изображения" - 3 раза для RGB, 4 раза для RGBA. Только в конце строки вставляются нули, чтобы следующая строка начиналась с границы DWORD.