Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
algorithms.doc
Скачиваний:
29
Добавлен:
06.12.2018
Размер:
9.73 Mб
Скачать
    1. Форматы bmp и rle

Формат BMP исторически является основным форматом представления изображений в ОС Microsoft Windows*. Постараемся дать, по возможности, полное описание формата.

Обычно формат не использует алгоритмов сжатия. Поэтому не представляет особого труда написать собственную программу, позволяющую считывать изображения с диска (т.е. конвертировать их из BMP формата в формат, удобный для непосредственного использования) и записывать их на диск.

Данный формат дает возможность представлять изображения с палитрой или без нее. При наличии палитры значение цвета в каждом пикселе задается номером цвета. Сам цвет определяется по его номеру в палитре, представляющей собой массив

unsigned char pal[256][4];

Каждая строка в массиве палитры задает один цвет с помощью указания его RGB составляющих, соответственно, в ячейках с номерами 0, 1, 2. Количество строк зависит от количества используемых цветов и, обычно, не превосходит 256 (что соответствует изображению, в котором на один пиксел отводится 8 бит).

Данные можно представлять в формате true color, когда каждый пиксел задается 4-мя байтами. Из них используется 3 байта для размещения RGB компонент цвета (по одному байту на каждую компоненту).

Возможно большое количество нестандартных вариаций данного формата. Например, отсутствие палитры в изображениях с толщиной 8 бит на пиксел может обозначать, что кодируется серое изображение, в каждом байте которого хранится яркость пиксела. Некоторые программы понимают форматы BMP в которых отводится 3 байта на пиксел (формат true color) или даже 2 байта на пиксел (в пикселе хранится только яркость, т.е. кодируется серое изображение).

Файл состоит из следующих разделов:

  • Заголовка

  • Возможно – палитры

  • Собственно данных

Заголовок файла представляется следующей структурой

struct BMPHEAD

{

unsigned short int Signature ; // Must be 0x4d42 == ”BM” //0

unsigned long FileLength ; // в байтах //2

unsigned long Zero ; // Must be 0 //6

unsigned long Ptr ; // смещение к области данных //10

unsigned long Version ;// длина оставшейся части заголовка=0x28 //14

unsigned long Width ; // ширина изображения в пикселах //18

unsigned long Height ; // высота изображения в пикселах //22

unsigned short int Planes ; // к-во битовых плоскостей //26

unsigned short int BitsPerPixel ; // к-во бит на папиксел //28

unsigned long Compression ; // сжатие: 0 или 1 или 2 //30

unsigned long SizeImage ; // размер блока данных в байтах //34

unsigned long XPelsPerMeter ; // в ширину: пикселов на метр //38

unsigned long YPelsPerMeter ; // в высчоту: пикселов на метр //42

unsigned long ClrUsed ; // к-во цветов в палитре //46

unsigned long ClrImportant ; // к-во используемых цветов в палитре //50

} ;

Предполагается, что sizeof(unsigned long)==4, sizeof(unsigned short int)==2.

Соответствующие поля в файле с данным форматом непрерывно располагаются в указанном порядке.

Палитра (если она есть) следует сразу за заголовком. Данные начинаются с байта номер Ptr, начиная от начала файла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]