Главная страницаСтатьиПрограммыСсылкиФорум |
Формат BMP состоит из нескольких частей: заголовок, палитра, сам рисунок. Я сам читал максимум 256-цветные картинки (использовал драйвер svga256.bgi, но там только 256 цветов). Структура первого заголовка:
Всего 14 байт. Далее идёт второй заголовок:
Всего 40 байт. BitCount может принимать значения: 1 - картинка монохромная, в палитре всего 2 цвета и картинка кодируется следующим образом: каждый бит в массиве кодирует цвет (0 - 1 цвет, 1 - 2-ой) 4 - картинка имеет максимум 16 цветов. Цвет пиксела определяет четырёхбитный блок. 8 - картинка имеет максимум 256 цветов. Каждый байт определяет цвет. 24 - картинка имеет 2^24 цветов (16777216) палитра отсутствует и цвет определяется пакетом из трёх байтов - красный, зелёный, синий. Если TypeComp не ноль, то картинка сжата и надо будет использовать алгоритм RLE, это я расскажу в следующей статье. Далее идёт палитра (если BitCount не 24):
Далее идёт картинка: Рисуется снизу вверх, слева направо. Т.е. начало координат - нижний угол экрана. А рисовать сначала надо слева направо первую строчку, потом вторую и т.д. ... Раскодируется так: BitCount == 1 рассматривается бит bit:
рассматривается четвёрка битов bites:
BitCount == 8 рассматривается байт byte:
BitCount == 24 рассматривается тройка байтов red, green, blue:
под квадратными скобками я подразумеваю нарисовать цвет (интенсивность красного, интенсивность зелёного, интенсивность синего). При всех BitCount, кроме 24, надо писать setrgbpalette() при чтении палитры. При BitCount == 24 надо писать setrgbpalette() при чтении картинки. Я написал исходник только для 256 цветов. Вы можете изменить его и для 24б. |