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