Это шестнадцатеричный дамп растрового изображения 5x5, окрашенного в красный цвет:

Мой вопрос: как мне изменить только шестнадцатеричные значения (без использования инструмента, такого как Paint), чтобы изменить цвет растрового изображения, например, на зеленый (0,255,0) или любой другой цвет?

Кроме того, как инструменты, такие как Paint, преобразуют пиксели, которые вы рисуете, в гекс, чтобы сохранить растровое изображение?

1 ответ1

2

Вот документация для 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, поэтому hex (10) = dec (16). Вы можете использовать калькулятор Windows, установленный в "режим программиста", если вам нужна помощь в конвертации.
  • "порядок байтов" от низкого до высокого, поэтому 4-байтовое значение "05 00 00 00" следует понимать как "00 00 00 05"
  • триплеты RGB в BMP меняются местами

Основываясь на шестнадцатеричном дампе и документации, ваше изображение сохраняет каждый пиксель в виде несжатого RGB-триплета. Первый пиксель - это триплет 24 1c ed , но он перевернут, так что это шестнадцатеричный (ed1c24), который действительно красного цвета. Обратите внимание, что после каждой строки по 5 пикселей есть пэд 00 . В документации сказано, что это для "выравнивания байтов".

Таким образом, чтобы изменить пиксель с красного на синий, вы можете изменить один из триплетов с 24 1c ed на ed 1c 24 .

Что касается программного обеспечения, вы должны открыть файл (или копию) с помощью Hex Editor, внести изменения и сохранить его. Простого использования текстового редактора в "режиме редактирования текста" недостаточно, поскольку текстовый символ "0" не совпадает с двоичным числовым значением 0.

Notepad++ с открытым исходным кодом имеет возможность шестнадцатеричного редактирования с помощью плагинов.

Что касается более крупного вопроса о том, как Paint создает изображение, то программа использует документацию и стандарты для автоматизации процесса. В основном это вопрос соглашения. "Поток изображения" (данные пикселей) сохраняется и обрабатывается в памяти аналогично тому, как вы видите в несжатом файле изображения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .