Спецификация формата изображений BMI (BitMap Image, v1.0)
Формат BMI предназначен для максимально компактного представления монохромных (в градациях серого) изображений в виде чистого печатного ASCII-текста. Формат ориентирован на использование в ретро-системах, текстовых протоколах и веб-утилитах с ограниченной пропускной способностью.
1. Структура файла
Файл формата BMI состоит строго из трех строк, разделенных стандартным маркером конца строки (\n или \r\n):
- Строка 1 (Магическая сигнатура): Строка BMI, идентифицирующая тип файла.
- Строка 2 (Метаданные геометрии): Ширина и высота изображения в пикселях, записанные в формате [Ширина],[Высота] (например: 10,10). Значения являются целыми положительными числами в десятичной системе счисления.
- Строка 3 (Растровые данные): Непрерывная последовательность ASCII-символов, кодирующих яркость каждого пикселя. Пробелы, переводы строк или иные разделители внутри этой строки запрещены.
2. Кодирование цвета (Глубина цвета)
Формат поддерживает 24 градации серого цвета (от чисто черного до чисто белого). Для кодирования яркости используется подмножество латинского алфавита в верхнем регистре от A до X.Каждому символу соответствует строго фиксированный уровень яркости:
| Символ | Индекс (0-23) | Яркость (%) | Описание |
|---|---|---|---|
| A | 0 | 0.0% | Чистый черный (Black) |
| B | 1 | 4.3% | |
| C | 2 | 8.7% | |
| … | … | … | … |
| W | 22 | 95.7% | |
| X | 23 | 100.0% | Чистый белый (White) |
Формула перевода индекса символа I (где A=0, B=1 … X=23) в 8-битную яркость RGB:
V = round(I × (255 ÷ 23))
3. Порядок чтения растра
Пиксели считываются из третьей строки последовательно, слева направо, сверху вниз (стандартная развертка):
- Первый символ — верхний левый пиксель (0, 0).
- Общее количество символов в третьей строке должно строго равняться произведению Ширина * Высота. Любое расхождение считается ошибкой целостности данных.
4. Пример валидного BMI-файла (Квадрат 3x3 с градиентом)
BMI
3,3
ABCDEFGHI