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


Сжатие растрового изображения

Windows поддерживает форматы для сжатия растровых изображений, определяющих их цвета с 8 или 4 битами на пиксель. Сжатие уменьшает объем диска и памяти, необходимых для растрового изображения.

Если элемент сжатия элемента структуры заголовка сведений о растровом рисунке 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 

Если элемент сжатия BI_RLE4, то растровое изображение сжимается с помощью формата кодирования длиной выполнения для 4-разрядной растровой карты, которая также использует закодированные и абсолютные режимы:

  • В закодированном режиме первый байт пары содержит количество пикселей, которые нужно нарисовать с помощью цветовых индексов во втором байте. Второй байт содержит два цветовых индекса, один в 4 битах с высоким порядком и один в 4 битах с низким порядком. Первая из пикселей рисуется с помощью цвета, указанного 4-разрядными битами высокого порядка, второй рисуется с помощью цвета в 4 битах с низким порядком, третий рисуется с помощью цвета в 4 битах с высоким порядком и т. д., пока все пиксели, указанные первым байтом, будут нарисованы.
  • В абсолютном режиме первый байт равен нулю. Второй байт содержит число следующих индексов цвета. Последующие байты содержат цветовые индексы в их 4 битах с высоким и низким порядком, один цветовый индекс для каждого пикселя. В абсолютном режиме каждое выполнение должно быть выровнено по границе слова. Конечная линия, конечная растровая карта и разностные экраны, описанные для BI_RLE8 также применяются к сжатиям BI_RLE4.

В следующем примере показаны шестнадцатеричные значения 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