Поделиться через


Сжатие точечных рисунков

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