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