typedef struct tagBITMAPINFOHEADER { // bmih DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;
Переменные
biSize - содержит размер структуры в байтах.
biWidth - содержит ширину битового образа в элементах изображения. В Windows 98, Windows NT 5.0 и более поздних версиях: если переменная biCompression имеет значение BI_JPEG, то переменная biWidth содержит ширину декомпрессированного файла формата JPEG.
biHeight - содержит высоту битового образа в элементах изображения. Если переменная biHeight содержит положительное значение, то битовый образ строится снизу вверх и его нулевая точка расположена в левом нижнем углу. Если переменная biHeight содержит отрицательное значение, то битовый образ строится сверху вниз и его нулевая точка расположена в левом верхнем углу. Если переменная biHeight содержит отрицательное значение, то переменная biCompression может принимать значения или BI_RGB или BI_BITFIELDS, поскольку данный битовый образ не сжимается. В Windows 98, Windows NT 5.0 и более поздних версиях: Если переменная biCompression имеет значение BI_JPEG, то переменная biWidth содержит высоту декомпрессированного файла формата JPEG.
biPlanes - содержит число битовых плоскостей в используемом устройстве. Данная переменная всегда должна содержать значение 1.
biBitCount - содержит число бит, используемых для кодирования одного элемента изображения. Эта величина определяет максимальное число цветов в палитре битового образа. Может принимать следующие значения. 0 - может быть установлено только в Windows 98, Windows NT 5.0 и более поздних версиях. Число бит на элемент изображения определяется форматом JPEG. 1 - выводится монохромный битовый образ. Массив образа bmiColors имеет два элемента. Каждому элементу изображения соответствует один бит в массиве битового образа. При нулевом значении этого бита для вывода элемента изображения используется цвет, определенный в нулевом элементе массива bmiColors. В противном случае для задания цвета используется первый элемент данного массива. 4 - битовый образ использует не более 16 цветов. Массив bmiColors может содержать до 16 элементов. Каждому элементу изображения в этом случае соответствует 4-битовый индекс в таблице цветов. Например, если первый байт массива битового образа содержит значение 0x1F, то в нем содержится информация о цвете двух элементов изображения. Цвет первого из них определяется первым элементом массива цветов, а цвет второго - пятнадцатым. 8 - битовый образ использует не более 256 цветов. Массив bmiColors может содержать до 256 элементов. В этом случае каждому из элементов изображения будет соответствовать свой байт в массиве битового образа. 16 - битовый образ использует не более 216 цветов. Если переменная biCompression данного объекта структуры имеет значение BI_RGB, то переменная bmiColors имеет нулевое значение. В данном случае каждому элементу изображения битового образа соответствует одно слово (WORD) его массива. Для представления относительной интенсивности красного, зеленого и синего цветов используется по 5 бит на каждый из цветов. Значение интенсивности синего цвета помещается в младшие 5 бит. Затем следуют значения интенсивности зеленого и красного цветов. Старший бит слова не используется. Массив bmiColors используется для оптимизации цветов на устройствах, использующих палитры и должен иметь размерность, равную значению переменной biClrUsed данного объекта структуры. Если переменная biCompression имеет значение BI_BITFIELDS, то массив bmiColors объекта структуры BITMAPINFODWORD). Каждому из элементов изображения соответствует отдельное слово в массиве битового образа. В Windows NT добавляется требование того, чтобы биты в масках располагались смежно и не перекрывались бы с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. В Windows 95 и Windows 98 в том случае, если переменная biCompression имеет значение BI_BITFIELDS, могут использоваться только перечисленные ниже 16-разрядные битовые маски: маска 5-5-5, в которой синий цвет имеет маску 0x001F, зеленый - 0x03E0 и красный - 0x7C00; и маска 5-6-5, , в которой синий цвет имеет маску 0x001F, зеленый - 0x07E0 и красный - 0xF80. 24 - битовый образ использует не более 224 цветов и переменная bmiColors имеет нулевое значение. Каждые 3 байта в массиве битового образа представляют собой относительную интенсивность синего, зеленого и красного цветов изображения. Массив bmiColorsbiClrUsed данного объекта структуры. 32 - битовый образ использует не более 232 цветов. Если переменная biCompression данного объекта структуры имеет значение BI_RGB, то переменная bmiColors имеет нулевое значение. В данном случае каждому элементу изображения битового образа соответствует одно двойное слово (DWORD) его массива, содержащее информацию об интенсивности красного, зеленого и синего цветов. Старший байт двойного слова не используется. Массив bmiColors используется для оптимизации цветов на устройствах, использующих палитры и должен иметь размерность, равную значению переменной biClrUsed данного объекта структуры. Переменная biCompression объекта структуры BITMAPINFOHEADER может иметь значение BI_BITFIELDS. В этом случае элемент массива bmiColors содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Каждому из элементов изображения соответствует двойное слово (DWORD) в массиве битового образа. В Windows NT добавляется требование того, чтобы биты в масках располагались смежно и не перекрывались бы с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. В Windows 95 и Windows 98 в том случае, если переменная biCompression имеет значение BI_BITFIELDS, может использоваться только приведенная ниже 32-разрядная битовая маска: синий цвет имеет маску 0x000000FF, зеленый - 0x0000FF00 и красный - 0x00FF0000.
biCompression - определяет тип сжатия информации в битовом образе, строящемся снизу вверх (битовый образ, строящийся сверху вниз, не может сжиматься). Определены следующие значения: BI_RGB - сжатие отсутствует; BI_RLE8 - кодирование потоковым кодом (RLE) для битовых образов, использующих 8-битовое кодирование элемента изображения. Код состоит из двух байт, первый из которых содержит счетчик повторов, а второй - повторяемый индекс цвета; BI_RLE4 - кодирование потоковым кодом (RLE) для битовых образов, использующих 4-битовое кодирование элемента изображения. Код состоит из двух байт, первый из которых содержит счетчик повторов, а второй - два повторяемых индекса цвета; BI_BITFIELDS - указывает на то, что битовый образ не сжимался, а таблица цветов содержит три маски формата DWORD, определяющие интенсивность красного, зеленого и синего цветов для каждого элемента изображения; BI_JPEG - может устанавливаться в Windows 98, Windows NT 5.0 и более поздних версиях. Указывает на то, что битовый образ имеет формат JPEG.
biSizeImage - содержит размер изображения в байтах. При работе с битовыми образами формата BI_RGB может принимать нулевое значение. В Windows 98, Windows NT 5.0 и более поздних версиях: если переменная biCompressionBI_JPEG, то переменная biSizeImage содержит размер буфера изображения JPEG.
biXPelsPerMeter - содержит горизонтальное разрешение используемого устройства отображения, измеряемое в элементах изображения на метр. Приложение может использовать эту величину для выбора из группы ресурсов битового образа, наиболее соответствующего характеристикам используемого устройства.
biYPelsPerMeter - содержит вертикальное разрешение используемого устройства отображения, измеряемое в элементах изображения на метр.
biClrUsed - определяет число индексов в таблице цветов, используемых данным битовым образом. Если эта переменная имеет нулевое значение, то битовый образ использует максимальное число цветов, определяемое значением переменной biBitCount и режимом компрессии, определяемым переменной biCompression. Если переменная biClrUsedbiBitCount меньше 16, то переменная biClrUsed определяет истинное число цветов, используемое графическим устройством или драйвером. Если значение переменной biBitCount больше или равно 16, то значение переменной biClrUsed определяет размер таблицы цветов, используемый для оптимизации работы с системными палитрами. Если значение переменной biBitCount равно 16 или 32, то оптимальная цветовая палитра помещается непосредственно за тремя масками формата DWORD. Если битовый образ упакован (то есть, если массив битового образа следует за объектом структуры BITMAPINFO и для обращения к нему используется один указатель), переменная biClrUsed должна иметь нулевое значение или содержать истинный размер таблицы цветов.
biClrImportant - определяет число индексов в таблице цветов, необходимое для вывода битового образа. Если эта переменная имеет нулевое значение, для вывода битового образа необходимы все цвета. Содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Каждому из элементов изображения соответствует отдельное слово в массиве битового образа. В Windows NT добавляется требование того, чтобы биты в масках располагались смежно и не перекрывались бы с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. В Windows 95 и Windows 98 в том случае, если переменная biCompression имеет значение BI_BITFIELDS, могут использоваться только перечисленные ниже 16-разрядные битовые маски: маска 5-5-5, в которой синий цвет имеет маску 0x001F, зеленый - 0x03E0 и красный - 0x7C00; и маска 5-6-5, , в которой синий цвет имеет маску 0x001F, зеленый - 0x07E0 и красный - 0xF80. 24 - битовый образ использует не более 224 цветов и переменная bmiColors имеет нулевое значение. Каждые 3 байта в массиве битового образа представляют собой относительную интенсивность синего, зеленого и красного цветов изображения. Массив bmiColors используется для оптимизации цветов на устройствах, использующих палитры и должен иметь размерность, равную значению переменной biClrUsed данного объекта структуры. 32 - битовый образ использует не более 232 цветов. Если переменная biCompression данного объекта структуры имеет значение BI_RGB, то переменная bmiColors имеет нулевое значение. В данном случае каждому элементу изображения битового образа соответствует одно двойное слово (DWORD) его массива, содержащее информацию об интенсивности красного, зеленого и синего цветов. Старший байт двойного слова не используется. Массив bmiColors используется для оптимизации цветов на устройствах, использующих палитры и должен иметь размерность, равную значению переменной biClrUsed данного объекта структуры. Переменная biCompression объекта структуры BITMAPINFOHEADER может иметь значение BI_BITFIELDS. В этом случае элемент массива bmiColors содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Каждому из элементов изображения соответствует двойное слово (DWORD) в массиве битового образа. В Windows NT добавляется требование того, чтобы биты в масках располагались смежно и не перекрывались бы с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. В Windows 95 и Windows 98 в том случае, если переменная biCompression имеет значение BI_BITFIELDS, может использоваться только приведенная ниже 32-разрядная битовая маска: синий цвет имеет маску 0x000000FF, зеленый - 0x0000FF00 и красный - 0x00FF0000.
biCompression - определяет тип сжатия информации в битовом образе, строящемся снизу вверх (битовый образ, строящийся сверху вниз, не может сжиматься). Определены следующие значения: BI_RGB - сжатие отсутствует; BI_RLE8 - кодирование потоковым кодом (RLE) для битовых образов, использующих 8-битовое кодирование элемента изображения. Код состоит из двух байт, первый из которых содержит счетчик повторов, а второй - повторяемый индекс цвета; BI_RLE4 - кодирование потоковым кодом (RLE) для битовых образов, использующих 4-битовое кодирование элемента изображения. Код состоит из двух байт, первый из которых содержит счетчик повторов, а второй - два повторяемых индекса цвета; BI_BITFIELDS - указывает на то, что битовый образ не сжимался, а таблица цветов содержит три маски формата DWORD, определяющие интенсивность красного, зеленого и синего цветов для каждого элемента изображения; BI_JPEG - может устанавливаться в Windows 98, Windows NT 5.0 и более поздних версиях. Указывает на то, что битовый образ имеет формат JPEG.
biSizeImage - содержит размер изображения в байтах. При работе с битовыми образами формата BI_RGB может принимать нулевое значение. В Windows 98, Windows NT 5.0 и более поздних версиях: если переменная biCompression имеет значение BI_JPEG, то переменная biSizeImage содержит размер буфера изображения JPEG. biXPelsPerMeter - содержит горизонтальное разрешение используемого устройства отображения, измеряемое в элементах изображения на метр. Приложение может использовать эту величину для выбора из группы ресурсов битового образа, наиболее соответствующего характеристикам используемого устройства. biYPelsPerMeter - содержит вертикальное разрешение используемого устройства отображения, измеряемое в элементах изображения на метр.
biClrUsed - определяет число индексов в таблице цветов, используемых данным битовым образом. Если эта переменная имеет нулевое значение, то битовый образ использует максимальное число цветов, определяемое значением переменной biBitCount и режимом компрессии, определяемым переменной biCompression. Если переменная biClrUsed имеет ненулевое значение, а значение переменной biBitCount меньше 16, то переменная biClrUsed определяет истинное число цветов, используемое графическим устройством или драйвером. Если значение переменной biBitCount больше или равно 16, то значение переменной biClrUsed определяет размер таблицы цветов, используемый для оптимизации работы с системными палитрами. Если значение переменной biBitCount равно 16 или 32, то оптимальная цветовая палитра помещается непосредственно за тремя масками формата DWORD. Если битовый образ упакован (то есть, если массив битового образа следует за объектом структуры BITMAPINFO и для обращения к нему используется один указатель), переменная biClrUsed должна иметь нулевое значение или содержать истинный размер таблицы цветов.
biClrImportant - определяет число индексов в таблице цветов, необходимое для вывода битового образа. Если эта переменная имеет нулевое значение, для вывода битового образа необходимы все цвета.
Описание
Объект структуры BITMAPINFOHEADER содержит информацию о размере и формате цветов аппаратно-независимого битового образа (DIB). Приложения, разработанные для операционных систем Windows NT 4.0 и Windows 95, могут использовать структуру BITMAPV4HEADER, а приложения, разработанные для операционных систем Windows NT 5.0 и Windows 98, могут использовать структуру BITMAPV5HEADER, предоставляющую дополнительные возможности. Объект структуры BITMAPINFO, включающий в себя объект структуры BITMAPINFOHEADER и таблицу цветов, содержит исчерпывающую информацию по размерам и цветам аппаратно-независимого битового образа. В Windows 98, Windows NT 5.0 и более поздних версиях структура BITMAPINFOHEADER расширена таким образом, чтобы позволить передавать битовый образ в формате JPEG функции StretchDIBBits. Описание данной структуры содержится в файле заголовка wingdi.h.