Приложение А. Рисунки в файлах BMP.
Общая характеристика стандарта
Точечные или растровые рисунки являются одной из распространенных форм представления графической информации. Существует множество различных стандартов хранения таких рисунков на внешних носителях в виде файлов. В пятерку наиболее популярных входят BMP, PCX, TIFF, GIF и JPG.Заголовок файла для Windows
Первые точечные рисунки хранились в аппаратно-зависимом формате DDB (Device Dependent Bitmap). Такое представление было крайне неудобным, и разработчики Windows 3.0 отказались от него. Для нас оно не представляет интереса, поскольку не предназначено для современных видеосистем.Заголовок файла для OS/2
Оболочка Presentation Manager операционной системы OS/2 использует другой формат заголовка ВМР-файла. Разработчики OS/2 учли избыточность стандарта BMP для Windows и сократили заголовок до минимально необходимых размеров. Его структура показана в табл. А.2.Образ рисунка в файле
Исторически стандарт BMP предназначался для Windows, а в ней при построении изображений "по умолчанию" начало координат расположено в нижнем левом углу экрана. Значения по оси х возрастают слева направо, а по оси Y – снизу вверх.Общая схема обработки заголовка файла. Возможные отклонения от стандарта.
Для построения на экране рисунка, хранящегося в ВМР-файле, надо выпол-нить следующие действия: | ввести спецификацию и открыть файл для чтения; | прочитать заголовок и выбрать из него данные о рисунке и файле; | установить или преобразовать палитру используемых в рисунке цветов;Ввод спецификации и открытие файла
Для упрощения программирования работы с файлами DOS выполняет много полезных функций. Их использование возможно только при соблюдении определенных правил манипуляций с файлами. Одно из них заключается в том, что для работы с существующим файлом его надо предварительно открыть и получить идентификатор файла, необходимый для выполнения последующих действий.Чтение заголовка файла и палитр
Действия, предшествующие построению рисунка, описаны ниже по шагам. На каждом шаге приводится обоснование действий и их программная реализация. Это сделано для того, чтобы описание и программирование конкретных действий были расположены близко друг к другу.Анализ основных полей заголовка
Для построения рисунка надо знать его ширину, высоту и размер строки в файле. Следует подчеркнуть, что ширина рисунка и размер строки в файле являются разными величинами и их значения чаще всего не совпадают. | Будем считать, что в разделе данных задачи описаны переменные: | iwidth dw 0;Манипуляции с палитрой
Для окончания обработки заголовка надо извлечь из него величины, необходимые для установки или преобразования палитры цветов. | Палитра применяется в тех случаях, когда цвет не указан в коде точки (biBitcnt = 1, 4 или 8), она содержит описание используемых в рисунке цветов и состоит из строк, количество которых изменяется от 2 до 256.Построение рисунков, использующих палитру. Построение рисунка сверху вниз.
Если задача выполнила действия, описанные в предыдущих разделах, то остается только указать адрес начала рисунка в видеопамяти и можно начинать процедуру его построения. При работе с файлами формата BMP достаточно иметь одну универсальную процедуру, выполняющую построение изображения снизу вверх.Построение рисунка снизу вверх
При работе с BMP-файлами произвольного размера основным способом является построение изображения снизу вверх. В таком случае строки образа рисунка считываются в порядке их расположения в файле, а выводятся на экран начиная с последней строки рисунка.Универсальная процедура построения рисунка
В данном разделе описана универсальная процедура построения рисунка формата BMP, использующего палитру цветов. Двухцветные и 16-цветные рисунки хранятся в упакованном виде, поэтому процедура выбирает нужную подпрограмму для их распаковки.