На этом шаге мы рассмотрим структуру файла BMP.
К настоящему времени известно много форматов файлов для растровых изображений. Здесь мы рассмотрим один из самых популярных форматов, который
обязан своей распространенностью операционной системе Windows - формат BMP.
Общая структура BMP-файла такова:
Рис.1. Общая структура BMP-файла
Заголовок файла BMP называется BITMAPFILEHEADER. В нем помещается общее описание файла. Заголовок имеет следующие поля:
- WORD bfType - хранит символы "ВМ". Это код формата.
- DWORD bfSize - общий размер файла в байтах.
- WORD bfReservedl - зарезервировано, пока что равно 0.
- WORD bfReserved2 - зарезервировано, пока что равно 0.
- DWORD bfOffBits - адрес битового массива в данном файле.
Далее в файле следует еще один заголовок - BITMAPINFOHEADER, в котором хранится описание размеров растра и цветового формата пикселей. Здесь имеются такие поля:
- DWORD biSize - размер заголовка, равен 40.
- LONG biWidth - ширина растра в пикселях.
- LONG biHeight - высота растра в пикселях.
- WORD biPlanes - должно быть равно 1.
- WORD biBitCount - бит на пиксель, может быть 1, 4, 8, 16, 24 или 32.
- DWORD biCompression - равно нулю.
- DWORD biSizeImage - размер в байтах битового массива растра.
- LONG biXPelsPerMeter - разрешение по X в пикселях на метр.
- LONG biYPelsPerMeter - разрешение по Y в пикселях на метр.
- DWORD biClrUsed - если равно 0, то используется максимальное число цветов.
- DWORD biClrImportant - равно 0, если biClrUsed = 0.
Затем в файле помещается палитра в виде записей RGBQUAD. Каждая запись содержит четыре поля.
- BYTE rgbBlue - цветовая компонента В, от 0 до 255.
- BYTE rgbGreen - компонента G.
- BYTE rgbRed - компонента R.
- BYTE rgbReserved - не используется, равно 0.
Количество записей RGBQUAD равно количеству используемых цветов. Палитра отсутствует, если число бит на пиксел равно 24. Также
палитра не нужна и для некоторых цветовых форматов 16 и 32 бит на пиксель.
Здесь приняты такие обозначения для типов полей:
- BYTE - однобайтовое целое число без знака.
- WORD - двухбайтовое целое число без знака.
- DWORD - четырехбайтовое целое число без знака.
- LONG - четырехбайтовое целое число со знаком.
После палитры (если она есть) в файле BMP записывается растр в виде битового (а точнее, байтового массива). В битовом массиве последовательно
записываются байты строк растра. Количество байт в строке должно быть кратно четырем, поэтому если количество пикселей по горизонтали не
соответствует такому условию, то справа в каждую строку дописывается некоторое число битов (выравнивание строк на границу двойного слова).
Сжатие изображений в файлах BMP отсутствует, однако подобный формат (Device Independent Bitmap) описания растровых
изображений также используется и для файлов типа DIB, где применяются простейшие алгоритмы сжатия RLE (Run Length Encoding).
Алгоритмы RLE также используются и в других растровых графических форматах, например PCX.
Описание других графических форматов можно найти в сети Internet.
Со следующего шага мы начнем рассматривать координатный метод.