Сжатие точечных рисунков
Windows поддерживает форматы для сжатия растровых изображений, которые определяют их цвета с 8 или 4 битами на пиксель. Сжатие уменьшает объем дискового пространства и памяти, необходимых для растрового изображения.
Если элемент Compression структуры заголовка сведений о растровом рисунке BI_RLE8, для сжатия 8-битового растрового изображения используется формат кодирования длительности (RLE). Этот формат можно сжимать в закодированном или абсолютном режиме. Оба режима могут находиться в любом месте одного растрового изображения:
- Закодированный режим состоит из двух байтов: первый байт указывает количество последовательных пикселей, которые будут нарисованы с помощью индекса цвета, содержащегося во втором байте. Кроме того, первый байт пары может быть равен нулю, чтобы указать escape-символ, обозначающий конец строки, конец растрового изображения или дельту в зависимости от значения второго байта. Интерпретация escape-файла зависит от значения второго байта пары, которое может быть одним из следующих значений.
Значение | Значение |
---|---|
0 | Конец строки. |
1 | Конец растрового изображения. |
2 | Дельта. 2 байта после escape-экрана содержат неподписанные значения, указывающие смещение вправо и вверх от следующего пикселя от текущей позиции. |
- В абсолютном режиме первый байт равен нулю, а второй — значение в диапазоне от 03H до FFH. Второй байт представляет количество последующих байтов, каждый из которых содержит индекс цвета одного пикселя. Если второго байта меньше, escape-экран имеет то же значение, что и режим кодирования. В абсолютном режиме каждое выполнение должно быть заполнено с нуля, чтобы завершиться на границе 16-разрядного слова.
В следующем примере показаны шестнадцатеричные значения 8-разрядного сжатого растрового изображения:
[03 04] [05 06] [00 03 45 56 67 00] [02 78] [00 02 05 01]
[02 78] [00 00] [09 1E] [00 01]
Растровое изображение расширяется следующим образом (двухзначные значения представляют индекс цвета для одного пикселя):
04 04 04
06 06 06 06 06
45 56 67
78 78
move current position 5 right and 1 up
78 78
end of line
1E 1E 1E 1E 1E 1E 1E 1E 1E
end of RLE bitmap
Если элемент Compression BI_RLE4, то растровое изображение сжимается с помощью формата кодирования длины выполнения для 4-разрядного растрового изображения, в котором также используются закодированные и абсолютные режимы:
- В закодированном режиме первый байт пары содержит количество пикселей, нарисованных с помощью цветовых индексов во втором байте. Второй байт содержит два цветовых индекса: один в 4 битах высокого порядка и один в 4 битах нижнего порядка. Первый из пикселей рисуется с помощью цвета, заданного 4 битами высокого порядка, второй рисуется с помощью цвета в 4 битах нижнего порядка, третий рисуется с помощью цвета в 4 битах высокого порядка и т. д., пока не будут отрисованы все пиксели, указанные в первом байте.
- В абсолютном режиме первый байт равен нулю. Второй байт содержит число следующих цветовых индексов. Последующие байты содержат цветовые индексы в 4 битах высокого и низкого порядка, по одному индексу цвета для каждого пикселя. В абсолютном режиме каждый запуск должен быть выровнен по границе слова. Для сжатия BI_RLE4 также применяются escape-символы конца линии, точечные рисунки и разностные escape-экраны, описанные для BI_RLE8.
В следующем примере показаны шестнадцатеричные значения 4-разрядного сжатого растрового изображения:
03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01
04 78 00 00 09 1E 00 01
Растровое изображение расширяется следующим образом (однозначные значения представляют индекс цвета для одного пикселя):
0 4 0
0 6 0 6 0
4 5 5 6 6 7
7 8 7 8
move current position 5 right and 1 up
7 8 7 8
end of line
1 E 1 E 1 E 1 E 1
end of RLE bitmap