Недавно я открыл два одинаковых растровых изображения в Notepad++. Заголовок одного из них начинается с:
'Бмб' а другой с: 'Бм~'
Почему это?
решение1
Это не весь заголовок — на самом деле это полтора поля от заголовка.
Вот формат заголовкаиз Википедии:
Смещение дек. | Размер | Цель |
---|---|---|
0 | 2 байта | Поле заголовка, используемое для идентификации файлов BMP и DIB, имеет вид 0x42 0x4D в шестнадцатеричном формате, как и BM в ASCII. Возможны следующие записи: - BM - Windows 3.1x, 95, NT, ... и т. д.- BA - OS/2 struct bitmap array- CI - OS/2 struct color icon- CP - OS/2 const color pointer- IC - OS/2 struct icon- PT - OS/2 pointer |
2 | 4 байта | Размер файла BMP в байтах |
6 | 2 байта | Зарезервировано; фактическое значение зависит от приложения, создающего изображение, если оно создано вручную, может быть равно 0 |
8 | 2 байта | Зарезервировано; фактическое значение зависит от приложения, создающего изображение, если оно создано вручную, может быть равно 0 |
10 | 4 байта | Смещение, т.е. начальный адрес байта, в котором находятся данные растрового изображения (массив пикселей). |
BM
— значение первого поля. Третий «символ» — это на самом деле первый байт из второго поля (размер BMP в байтах), неверно интерпретируемый как текст.
решение2
Потому что заголовок не является ни тем, ни другимБмбниБм~. ЭтоБМ. Ваши растровые изображения все-таки не были идентичны.
Это указано вСтруктура BITMAPFILEHEADER: «Тип файла; должен быть BM».
решение3
В заголовке первые 2 байта должны быть «BM», что у вас и есть.
Следующие 4 байта хранят размер файла, который, по совпадению, в вашем случае выглядит как «P» или «~».
Вы можете попробовать взять сырые байты в 4 местах и рассчитать размер файла. Он должен соответствовать размеру файла на диске.
Либо используйте Image Tools для обработки заголовка и извлечения размера файла, а затем сравните.