Вот документация для BMP: https://en.wikipedia.org/wiki/BMP_file_format#Pixel_array_.28bitmap_data.29
Краткая форма:
- Заголовок BMP 14 байтов (информация о файле)
- 40-байтовый заголовок DIB (информация об изображении)
- пикселей
В разделе заголовка DIB вы можете видеть два значения 5 для размеров в пикселях и значение hex (18) для 24-битного цвета (RGB).
Особый интерес представляет «Пример 1» в вики, который показывает HEX-дамп для изображения 2x2, похожего на то, что у вас есть здесь. Несколько заметок:
- Визуально байт представляет собой двузначный куплет (первый байт на вашем изображении - 42).
- отсчет начинается с 0, поэтому «смещение 31» - это 32-й байт.
- все числа являются шестнадцатеричными, поэтому hex (10) = dec (16). Вы можете использовать калькулятор Windows, установленный в «режим программиста», если вам нужна помощь в конвертации.
- «порядок байтов» от низкого до высокого, поэтому 4-байтовое значение «05 00 00 00» следует понимать как «00 00 00 05»
- триплеты RGB в BMP меняются местами
Основываясь на шестнадцатеричном дампе и документации, ваше изображение сохраняет каждый пиксель в виде несжатого RGB-триплета. Первый пиксель - это триплет 24 1c ed
, но он перевернут, так что это шестнадцатеричный (ed1c24), который действительно красного цвета. Обратите внимание, что 00
после каждой строки по 5 пикселей есть пэд. В документации сказано, что это для "выравнивания байтов".
Таким образом, чтобы изменить пиксель с красного на синий, вы можете изменить один из триплетов с 24 1c ed
на ed 1c 24
.
Что касается программного обеспечения, вы должны открыть файл (или копию) с помощью Hex Editor, внести изменения и сохранить его. Простого использования текстового редактора в «режиме редактирования текста» недостаточно, поскольку текстовый символ «0» не совпадает с двоичным числовым значением 0.
Notepad ++ с открытым исходным кодом имеет возможность шестнадцатеричного редактирования с помощью плагинов.
Что касается более крупного вопроса о том, как Paint создает изображение, то программа использует документацию и стандарты для автоматизации процесса. В основном это вопрос соглашения. «Поток изображения» (данные пикселей) сохраняется и обрабатывается в памяти аналогично тому, как вы видите в несжатом файле изображения.