Ответ 1
Изображение BMP (DIB) состоит из заголовка, за которым следуют несжатые данные цвета 1 (для 24 изображений в формате bpp это 3 байта на пиксель, сохраненные в порядке очередности строк и с шагом в 4 байта).
Байты для данных цвета используются для представления цветов (т.е. ни один из них не "закреплен" в формате файла 2 все они исходят из цвета каждого пикселя), и там идеальный Соответствие 1:1 между цветами пикселей и байтами, записанными в файле; таким образом, используя идеально выбранные цвета, вы можете фактически написать все, что хотите в файле (за исключением заголовка).
Когда вы открываете сгенерированный файл в блокноте, данные цвета будут отображаться как текст; вы все еще можете четко видеть из заголовка (часть от BM
до начала текста), которая определяется форматом файла.
По-моему, это видео было сделано следующим образом: сначала автор рассчитал размер, необходимый для растрового изображения, и создал DIB файл с правильным размером, заполненным цветом, который расширяется до простого шаблона (например, все байты 65 = > 'A'
); затем заменил такой шаблон кодом "полезной нагрузки", как показано на видео.
Обратите внимание, что это невозможно сделать вручную с помощью блокнота - с диалогом выбора цвета, таблицей ASCII и базовым знанием формата DIB это можно сделать, но это будет намного медленнее, а ошибка -prone.
- Есть сжатые DLE с RLE, но в этом случае используются несжатые растровые изображения (и они используются очень редко в любом случае).
- За исключением шага, этого избегали, используя строки, состоящие из 4 байтов.