растровые карты Device-Independent
Точечный рисунок (DIB) на устройстве содержит цветовую таблицу. Таблица цветов описывает, как значения пикселей соответствуют значениям RGB цвета, описывающие цвета, создаваемые путем создания света. Таким образом, DIB может достичь правильной цветовой схемы на любом устройстве. DIB содержит следующие сведения о цвете и измерении:
- Цветной формат устройства, на котором был создан прямоугольный образ.
- Разрешение устройства, на котором был создан прямоугольный образ.
- Палитра для устройства, на котором был создан образ.
- Массив битов, который сопоставляет красный, зеленый, синий (RGB) триплеты к пикселям в прямоугольном изображении.
- Идентификатор сжатия данных, указывающий схему сжатия данных (при наличии), используемую для уменьшения размера массива битов.
Сведения о цвете и измерении хранятся в структуре BITMAPINFO, которая состоит из структуры BITMAPINFOHEADER с двумя или более структурами RGBQUAD. Структура BITMAPINFOHEADER указывает размеры прямоугольника пикселя, описывает цветовую технологию устройства и определяет схемы сжатия, используемые для уменьшения размера растрового изображения. Структуры RGBQUAD определяют цвета, которые отображаются в прямоугольнике пикселей.
Существует два типа DIB:
- Нижний вверх DIB, в котором источник находится в левом нижнем углу.
- Верхний вниз DIB, в котором источник находится в верхнем левом углу.
Если высота DIB, как указано height элемент структуры заголовка растрового изображения, является положительным значением, это нижнее значение DIB; Если высота является отрицательным значением, это diB сверху вниз. Не удается сжать верхний вниз DIOB-объекты.
Формат цвета указывается с точки зрения количества цветовых плоскостей и битов цвета. Количество цветовых плоскостей всегда равно 1; Количество битов цвета — 1 для монохромных растровых изображений, 4 для растровых карт VGA и 8, 16, 24 или 32 для растровых изображений на других цветовых устройствах. Приложение извлекает количество битов цвета, которые использует определенный дисплей (или принтер), вызывая функцию GetDeviceCaps, указав BITSPIXEL в качестве второго аргумента.
Разрешение устройства отображения указывается в пикселях на метр. Приложение может получить горизонтальное разрешение для дисплея видео или принтера, выполнив этот трехэтапный процесс.
- Вызовите функцию GetDeviceCaps, указав HORZRES в качестве второго аргумента.
- Вызовите GetDeviceCaps второй раз, указав HORZSIZE в качестве второго аргумента.
- Разделите первое возвращаемое значение на второе возвращаемое значение.
Приложение может получить вертикальное разрешение с помощью одного и того же трехэтапного процесса с различными параметрами: 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.