Не зависящие от устройства точечные рисунки (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.

Разрешающая способность устройства вывода на экран определяется в пикселях на метр. Приложение может извлечь данные о разрешающей способности по горизонтали для экрана монитора или принтера, следуя  этому приему состоящему из трех шагов.

  1. Вызовите функцию GetDeviceCaps, определяя второй параметр как HORZRES.
  2. Вызовите GetDeviceCaps второй раз,  определяя второй параметр как HORZSIZE.
  3. Поделите первое возвращенное значение на второе.

Приложение может извлечь данные о разрешающей способности по вертикали, используя тот же самый трехшаговый прием с другими параметрами: 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.

Назад в оглавление
На главную страницу

Hosted by uCoz