Device-Independent растровые изображения

Аппаратно-независимое растровое изображение (DIB) содержит таблицу цветов. Таблица цветов описывает, как значения пикселей соответствуют значениям цвета RGB , которые описывают цвета, создаваемые при излучаемом свете. Таким образом, DIB может достичь правильной цветовой схемы на любом устройстве. DIB содержит следующие сведения о цвете и измерении:

  • Цветной формат устройства, на котором было создано прямоугольное изображение.
  • Разрешение устройства, на котором было создано прямоугольное изображение.
  • Палитра для устройства, на котором был создан образ.
  • Массив битов, который сопоставляет красный, зеленый, синий ( RGB ) триплексы с пикселями на прямоугольном изображении.
  • Идентификатор сжатия данных, указывающий схему сжатия данных (при наличии), используемую для уменьшения размера массива битов.

Сведения о цвете и измерении хранятся в структуре BITMAPINFO , которая состоит из структуры BITMAPINFOHEADER , за которой следуют две или более структуры RGBQUAD . Структура BITMAPINFOHEADER определяет размеры пиксельного прямоугольника, описывает технологию цвета устройства и определяет схемы сжатия, используемые для уменьшения размера растрового изображения. Структуры RGBQUAD определяют цвета, которые отображаются в прямоугольнике пикселей.

Существует две разновидности DIB:

  • DiB снизу вверх, в котором источник находится в левом нижнем углу.
  • Нисходящая 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 поддерживает сжатие массива палитры для dib 8 и 4 bpp снизу вверх. Эти массивы можно сжать с помощью схемы кодирования длины выполнения (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.