Visual C++. Описание стандартных классов
Страница 33.


 
BITMAPINFO
typedef struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
Переменные
"sectiontableheader"bmiHeader - объект структуры BITMAPINFOHEADER, содержащий информацию о размере и формате цветов аппаратно-независимого битового образа.
"sectiontableheader"bmiColors - массив переменных типа RGBQUAD или DWORD, определяющий цвета в используемой палитре.
Описание
Объект структуры BITMAPINFO используется для хранения информации о размере и палитре аппаратно-независимого битового образа (DIB). Описание аппаратно-независимого битового образа состоит из двух частей: объекта структуры BITMAPINFO, описывающего размеры и палитру, используемую данным битовым образом, и массива, содержащего информацию о яркости и цвете каждого из элементов изображения данного битового образа. Информация в массиве упакована по строкам и должна быть выровнена по границе двойного слова (переменной типа LONG). Для этого в конец каждой строки добавляются нулевые значения, выравнивающие ее длину до указанной границы. При задании положительного значения высоты битового образа его нулевая позиция будет располагаться в левом нижнем углу выделенного прямоугольника. В противном случае нулевая позиция будет располагаться в левом верхнем углу этого прямоугольника. Переменная biBitCount объекта структуры BITMAPINFOHEADER определяет число бит, используемых для кодирования цвета одного элемента изображения. Эта переменная может принимать одно из следующих значений:
"sectiontableheader"при использовании монохромного битового образа массив bmiColors имеет два элемента. Каждому элементу изображения соответствует один бит в массиве битового образа. При нулевом значении этого бита для вывода элемента изображения используется цвет, определенный в нулевом элементе массива bmiColors. В противном случае для задания цвета используется первый элемент данного массива;
"sectiontableheader"если битовый образ использует не более 16 цветов, то массив bmiColors может содержать до 16 элементов. Каждому элементу изображения в этом случае соответствует 4-битовый индекс в таблице цветов. Например, если первый байт массива битового образа содержит значение 0x1F, то в нем содержится информация о цвете двух элементов изображения. Цвет первого из них определяется первым элементом массива цветов, а цвет второго - пятнадцатым;
"sectiontableheader"если битовый образ использует не более 256 цветов, то массив bmiColors может содержать до 256 элементов. В этом случае каждому из элементов изображения будет соответствовать свой байт в массиве битового образа;
"sectiontableheader"если битовый образ использует не более 216 цветов, то переменная biCompression объекта структуры BITMAPINFOHEADER может иметь значение BI_BITFIELDS. В этом случае элемент массива bmiColors содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Биты в масках должны располагаться смежно и не перекрываться с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. Каждому из элементов изображения соответствует отдельное слово в массиве битового образа;
"sectiontableheader"если битовый образ использует не более 224 цветов и переменная bmiColors имеет нулевое значение, то каждые 3 байта в массиве битового образа представляют собой относительную интенсивность синего, зеленого и красного цветов изображения;
"sectiontableheader"если битовый образ использует не более 232 цветов, то переменная biCompression объекта структуры BITMAPINFOHEADER может иметь значение BI_BITFIELDS. В этом случае элемент массива bmiColors содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Биты в масках должны располагаться смежно и не перекрываться с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. Каждому из элементов изображения соответствует двойное слово (DWORD) в массиве битового образа.
Переменная biClrUsed объекта структуры BITMAPINFOHEADER определяет число используемых индексов в таблице цветов битового образа. Если переменная biClrUsed имеет нулевое значение, то битовый образ использует максимальное количество цветов, определяемое значением переменной biBitCount. Цвета в массиве bmiColors должны располагаться в порядке их важности. Вместо цветов формата RGB в массиве bmiColors могут быть указаны 16-разрядные индексы цветов в текущей реализованной логической палитре. В этом случае при вызове функций, работающих с аппаратно-независимыми битовыми образами, в аргументе iUsage следует передавать значение DIB_PAL_COLORS. Если битовый образ упакован (то есть, если массив битового образа следует за объектом структуры BITMAPINFO и для обращения к нему используется один указатель), переменная biClrUsed при установке флага DIB_PAL_COLORS должна иметь четное значение, чтобы массив аппаратно-независимого битового образа был бы выровнен по границе двойного слова. Переменная bmiColors не должна содержать индексы палитры, если данный битовый образ предполагается сохранить в файле или передать другому приложению. Если приложение не может обеспечить полный контроль за используемой палитрой, таблица цветов битового образа должна содержать только значения цветов в формате RGB. Для доступа к переменной bmiColors объекта структуры BITMAPINFO может быть использована следующая конструкция:
pColor = ((LPSTR)pBitmapInfo + (WORD)(pBitmapInfo->bmiHeader.biSize));
Описание данной структуры содержится в файле заголовка wingdi.h.
 
« Предыдущая статья   Следующая статья »