Разбор файла BMP

forfrends
Offline
Зарегистрирован: 24.02.2015
Всем привет!
Пытаюсь разобраться в структуре файла BMP, но что-то не сходится. Прикрепляю архив с двумя BMP файлами, с которыми провожу эксперименты. https://radiokot.ru/forum/download/file.php?id=335351
Файлы идентичны, с той лишь разницей, что o1.bmp создан в фотошопе. Потом я его открыл в Паинте и без редактирования сохранил под другим именем: o0.bmp.
Открываю обе картинки в Блокноте и вижу что они разные:
Смотрю в таблицу:
 
Пробую узнать размер файла (6 494 байт o0.bmp, и 6 496 байт o1.bmp):
Size: длина: 4 байта, смещение 2 байта:
o0.bmp : "^ "
o1.bmp : "` "
 
Для o0.bmp это символы в таблице ASCII https://istarik.ru/blog/programmirovanie/53.html:
94 - 01011110
25 - 00011001
32 - 00100000
32 - 00100000
 
Для o1.bmp это символы в таблице ASCII:
96 - 01100000
25 - 00011001
32 - 00100000
32 - 00100000
 
Как из этого набора символов получить размер файла?
Дальше интереснее и не понятнее (для меня). Пробую узнать ширину и высоту (384х134 пикселя):
 
Width: длина 4 байта, смещение 18 байт
Height: длина 4 байта, смещение 22 байт
Отсчитываю байты, получаю (они одинаковы у обоих файлов):
Width: "Ђ "
128 - 10000000
1 - 00000001
32 - 00100000
32 - 00100000
 
Height: "† "
134 - 10000110
32 - 00100000
32 - 00100000
32 - 00100000
 
Как из этого набора символов получить Ширину и высоту?
И т.д... На пример, Смещение изображения от начала файла: "> ", символ ASCII "64" и еще несколько "32"... как из этого высчитать начало самой картинки???
Если можете, разъясните мне. Спасибо
sadman41
Offline
Зарегистрирован: 19.10.2016

 

forfrends
Offline
Зарегистрирован: 24.02.2015

Спасибо, разобрался, сначала идет младший байт, а потом старший, а я считал наоборот, из-за этого и не сходилось

kalapanga
Онлайн
Зарегистрирован: 23.10.2016

Для начала размер. 4 байта со смещения 2 это в шестнадцатеричной системе:

1) 60 19 00 00 -> читать так -> 00 00 19 60 -> в десятичной -> 6496

2) 5E 19 00 00 -> читать так -> 00 00 19 5E -> в десятичной -> 6494

Ну и остальное наверное как-то в таком же духе.

brokly
brokly аватар
Онлайн
Зарегистрирован: 08.02.2014

kalapanga пишет:

Для начала размер. 4 байта со смещения 2 это в шестнадцатеричной системе:

1) 60 19 00 00 -> читать так -> 00 00 19 60 -> в десятичной -> 6496

2) 5E 19 00 00 -> читать так -> 00 00 19 5E -> в десятичной -> 6494

Ну и остальное наверное как-то в таком же духе.

Вот эти 4 со смещением два - единственная шляпа в бмпешке. Все остальное легко разруливается с помощью структур. Найти вменяемый мануал сильно сложно. Кроме того 3-3-3 и 3-4-3 отличаются единственным флагом, об этом вообще мало где упоминают.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Афигеть!

Я бы начал с того, что в строке поиска набрал "bmp file format", После чего, вероятно, почитал бы https://ru.wikipedia.org/wiki/BMP

PS. Честно говоря, с BMP работаю уже не первый десяток лет и могу сказать, что среди десятков форматов, для которых я писал ридеры, BMP - один из самых простых. И самое главно, этот формат - лучше всего описанный.