Не зависящие от устройства точечные рисунки (DIB)
Аппаратно-независимый точечный рисунок (DIB)) содержит таблицу цветов (color table). Таблица цветов описывает, как значения пикселя соответствуют значениям цветов RGB, которые характеризуют цвета, созданные излучением света. В соответствии с этим, растровый формат (DIB) может достигнуть надлежащей схемы цвета на любом устройстве. Аппаратно-независимый растровый формат (DIB) содержит нижеследующие цвета и информацию о размерах:
Цвет и информация о размерах сохраняются в структуре BITMAPINFO, которая состоит из структуры BITMAPINFOHEADER, сопровождаемой двумя или несколькими структурами RGBQUAD. Структура BITMAPINFOHEADER устанавливает размеры пиксельного прямоугольника, описывает технологию цветопередачи устройства и идентифицирует схемы сжатия, используемые, чтобы уменьшить размер точечного рисунка. Структуры RGBQUAD идентифицируют цвета, которые появляются в пиксельном прямоугольнике.
Существует две разновидности форматов DIB:
Если высота формата (DIB), как обозначено информацией точечного рисунка в члене Height структуры заголовка, является положительной величиной, это - восходящий аппаратно-независимый растровый формат (DIB); если высота - отрицательная величина, это - нисходящий аппаратно-независимый растровый формат (DIB). Нисходящие форматы DIB не могут сжиматься.
Цветовой формат определяется в единицах итогового числа битов цвета и цветовых плоскостей. Число цветовых плоскостей - всегда 1; число битов цвета - 1 для монохромных (одноцветных) точечных рисунков, 4 для точечных рисунков VGA, и 8, 16, 24, или 32 для точечных рисунков на других устройствах воспроизведения цвета. Приложение извлекает число битов цвета, для конкретного дисплея (или принтера) используя вызов функции GetDeviceCaps, в которой второй параметр определен как BITSPIXEL.
Разрешающая способность устройства вывода на экран определяется в пикселях на метр. Приложение может извлечь данные о разрешающей способности по горизонтали для экрана монитора или принтера, следуя этому приему состоящему из трех шагов.
Приложение может извлечь данные о разрешающей способности по вертикали, используя тот же самый трехшаговый прием с другими параметрами: VERTRES вместо HORZRES, и VERTSIZE вместо HORZSIZE.
Палитра представляется массивом структур RGBQUAD, которые определяют красную, зеленую и синюю компоненты яркости для каждого цвета в цветовой палитре дисплея. Каждый индекс цвета в массиве палитры отображает конкретный пиксель в прямоугольном регионе, связанном с точечным рисунком. Размер этого массива, в битах, эквивалентен ширине прямоугольника, в пикселях, умноженной на высоту прямоугольника, в пикселях, умноженной на число битов цвета для устройства. Приложение может извлечь данные о размере палитры устройства при помощи вызова функции GetDeviceCaps, определяя второй параметр как NUMCOLORS.
Windows поддерживает сжатие массива палитры для 8-битов на пиксель (bpp) и 4-битов на пиксель (bpp) восходящих аппаратно-независимых растровых форматов (DIB). Эти массивы могут сжиматься, используя схему кодирования длины серии (RLE). Схема RLE использует 2-байтовые значения, где первый байт определяет число последовательных пикселей, которые используют цветовой индекс, а второй байт устанавливает индекс. Для получения дополнительной информации о сжатии точечного рисунка, см. описание структур BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADER и BITMAPV5HEADER.
Приложение может создать аппаратно-независимый растровый формат (DIB) из аппаратно-зависимого растрового формата (DDB), инициализируя необходимые структуры и вызывая функцию GetDIBits. Чтобы выяснять, поддерживает ли устройство эту функцию, вызовите функцию GetDeviceCaps, определяя RC_DI_BITMAP как флажок RASTERCAPS.
Прикладная программа, которая должна копировать точечный рисунок, может использовать функцию TransparentBlt, чтобы скопировать все пиксели в исходном точечном рисунке в принимающий точечный рисунок, кроме тех пикселей, которые соответствуют прозрачному цвету.
Приложение может использовать аппаратно-независимый растровый формат (DIB), чтобы установить пиксели на дисплее при помощи вызова функции SetDIBitsToDevice или StretchDIBits. Чтобы выяснить, поддерживает ли устройство функцию SetDIBitsToDevice, вызовите функцию GetDeviceCaps, определяя RC_DIBTODEV как флажок RASTERCAPS. Установите RC_STRETCHDIB как флажок RASTERCAPS, чтобы выяснить, поддерживает ли устройство StretchDIBits.
Приложение, которое должно просто показать на экране существующий ранее аппаратно-независимый точечный рисунок (DIB), может использовать функцию SetDIBitsToDevice. Например, программа электронных таблиц может открыть существующие диаграммы и показать их на экране в окне, используя функцию SetDIBitsToDevice. Однако, чтобы повторно перерисовывать точечный рисунок в окне, приложение должно использовать функцию BitBlt. Например, мультимедийное приложение, которое объединяет анимируемую графику со звуком, извлекло бы выгоду из вызова функции BitBlt, потому что она исполняет код быстрее чем SetDIBitsToDevice.