Сжатие растрового изображения
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