Cтруктура хранения bmp файлов - lanit-tercom-school/grouplock GitHub Wiki

BMP-файлы

Структура bmp-файла:

Заголовок

Смещение Длина поля Описание поля
0 2 Код 4D42h — Буквы 'BM'
2 4 Размер файла в байтах
6 2 0 (Резервное поле)
8 2 0 (Резервное поле)
10 4 Начинается изображение

Заголовок BITMAP (Информация об изображении)

Смещение Длина поля Описание поля
14 4 Размер заголовка BITMAP в байтах (40)
18 4 Ширина изображения в пикселях
22 4 Высота изображения в пикселях
26 2 Число плоскостей (не используется) = 1
28 2 Бит/пиксель*
30 4 Тип сжатия (обычно не используется)
34 4 Размер сжатого изображения в байтах
38 4 Горизонтальное расширение, пиксель/м
42 4 Вертикальное расширение, пиксель/м
46 4 Кол-во используемых цветов (очень редко)
50 4 Кол-во "важных"цветов (не используется)

Палитра (Карта цветов для N цветов)**

Смещение Длина поля Описание поля
54 4*N Палитра
    • Изображение при глубине 1 бит/пиксель может иметь всего два цвета, а при глубине 24 бит/пиксель - более 16 млн. различных цветов. Microsoft предлагает битности 1, 2, 4, 8, 16, 24, 32, 48 и 64. В битностях 8 и ниже цвет пикселя указывается индексом в таблице цветов (палитре), в высших: непосредственным значением в цветовой модели RGB.
  • **(может отсутствовать) – массив, описывающий цвета, используемые в изображении. Только для BMP с глубиной не выше 8 бит/пиксель.

После палитры находятся данные изображения, которое по строкам растра записано снизу вверх, а внутри строки — слева направо. Так как на некоторых платформах невозможно считать единицу данных, которая меньше 4 байт, длина каждой строки выровнена на границу в 4 байта, т.е. при длине строки, не кратной четырем, она дополняется от 1 до 3 пустыми нулевыми байтами.

Смещение Формула на C
8 (3*Width)%4
16 (2*Width)%4
24 Width%4

24-битный цвет обычно состоит из трёх каналов: красный, зелёный, синий: RGB (Red, Green, Blue).
32-битный цвет обычно состоит из четырёх каналов: альфа (прозрачность), красный, зелёный, синий: ARGB (Alpha, Red, Green, Blue).

Особенности при шифровании: При шифровании bmp-файлов информацию о том, зашифрован файл или нет, можно хранить следующим образом:

  1. В заголовке файла;
  2. В RGB-матрице при кодировании не заменять последние биты битами новой картинки у первого элемента матрицы, а ввести флаг, по которому и определять, закодированное или нет.

Способы шифрования:
1.Визуальная криптография
2.Схема разделения секретной визуальной информации
3.Шифрование RGB изображения с помощью Фурье-образа

Литература:
Прячем текст в Bitmap http://habrahabr.ru/post/115673/
Визуальная криптография для цветных изображений http://habrahabr.ru/post/121878/
Существующие программы для шифрования bmp:http://gold-free.ru/soft/graph/coding.php
Ссылка на источник: https://ru.wikipedia.org/wiki/BMP