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

ОГЛАВЛЕНИЕ


BITMAPINFO

typedef struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;

Переменные

  • bmiHeader - объект структуры BITMAPINFOHEADER, содержащий информацию о размере и формате цветов аппаратно-независимого битового образа.
  • bmiColors - массив переменных типа RGBQUAD или DWORD, определяющий цвета в используемой палитре.
  • Описание

    Объект структуры BITMAPINFO используется для хранения информации о размере и палитре аппаратно-независимого битового образа (DIB). Описание аппаратно-независимого битового образа состоит из двух частей:
    • объекта структуры BITMAPINFO, описывающего размеры и палитру, используемую данным битовым образом, и массива, содержащего информацию о яркости и цвете каждого из элементов изображения данного битового образа. Информация в массиве упакована по строкам и должна быть выровнена по границе двойного слова (переменной типа LONG). Для этого в конец каждой строки добавляются нулевые значения, выравнивающие ее длину до указанной границы. При задании положительного значения высоты битового образа его нулевая позиция будет располагаться в левом нижнем углу выделенного прямоугольника. В противном случае нулевая позиция будет располагаться в левом верхнем углу этого прямоугольника. Переменная biBitCount объекта структуры BITMAPINFOHEADER определяет число бит, используемых для кодирования цвета одного элемента изображения. Эта переменная может принимать одно из следующих значений: при использовании монохромного битового образа массив bmiColors имеет два элемента. Каждому элементу изображения соответствует один бит в массиве битового образа. При нулевом значении этого бита для вывода элемента изображения используется цвет, определенный в нулевом элементе массива bmiColors. В противном случае для задания цвета используется первый элемент данного массива;
    • если битовый образ использует не более 16 цветов, то массив bmiColors может содержать до 16 элементов. Каждому элементу изображения в этом случае соответствует 4-битовый индекс в таблице цветов. Например, если первый байт массива битового образа содержит значение 0x1F, то в нем содержится информация о цвете двух элементов изображения. Цвет первого из них определяется первым элементом массива цветов, а цвет второго - пятнадцатым;
    • если битовый образ использует не более 256 цветов, то массив bmiColors может содержать до 256 элементов. В этом случае каждому из элементов изображения будет соответствовать свой байт в массиве битового образа;
    • если битовый образ использует не более 216 цветов, то переменная biCompression объекта структуры BITMAPINFOHEADER может иметь значение BI_BITFIELDS. В этом случае элемент массива bmiColors содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Биты в масках должны располагаться смежно и не перекрываться с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. Каждому из элементов изображения соответствует отдельное слово в массиве битового образа;
    • если битовый образ использует не более 224 цветов и переменная bmiColors имеет нулевое значение, то каждые 3 байта в массиве битового образа представляют собой относительную интенсивность синего, зеленого и красного цветов изображения;
    • если битовый образ использует не более 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. Для доступа к переменной bmiColorsBITMAPINFO может быть использована следующая конструкция:
      pColor = ((LPSTR)pBitmapInfo + (WORD)(pBitmapInfo->bmiHeader.biSize)); Описание данной структуры содержится в файле заголовка wingdi.h объекта структуры