Windows поддерживает форматы сжатия точечного рисунка, которые определяют их цвета с 8-ю или 4-мя битами на пиксель (bpp). Сжатие уменьшает пространство для сохранения данных на диске и в памяти, необходимое для точечного рисунка.
Сжатие формируют некоторые из нижеперечисленных имен членов в растровых информационных структурах заголовка для различных платформ. В обсуждении, которое следует ниже, сжатие используется, чтобы обозначить все эти варианты.
Операционная систиема | Сжатие |
---|---|
Windows NT 3.51 и ранее | biCompression |
Windows 95 и Windows NT 4.0 | bV4Compression |
Windows 98/Me и Windows 2000 | bV5Compression |
Когда член Compression растровой информационной структуры заголовка равен BI_RLE8, чтобы сжать 8-разрядный точечный рисунок, используется формат кодирования длины серии (RLE). Этот формат может сжимать в абсолютном режиме или режиме кодирования. Оба режима могут встретиться где-нибудь в одном и том же точечном рисунке:
Значение | Предназначение |
---|---|
0 | Конец строки. |
1 | Конец рисунка. |
2 | Кусочек. 2 байта, следующие за переходом содержат значения без знака, которые указывают горизонтальное и вертикальное смещение следующего пикселя от текущей позиции. |
Пример ниже показывает шестнадцатеричные значения 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 переместим текущую позицию на 5 вправо и на 1 вниз 78 78 конец строки 1E 1E 1E 1E 1E 1E 1E 1E 1E конец точечного рисунка RLE |
Когда член структуры Compression равен BI_RLE4, точечный рисунок сжимается, при помощи использования формата кодирования длины серий (RLE) для 4-х битового точечного рисунка, который также использует кодируемый и абсолютные режимы:
Пример ниже показывает шестнадцатеричные значения 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 переместим текущую позицию на 5 вправо и на 1 вниз 7 8 7 8 конец строки 1 E 1 E 1 E 1 E 1 конец точечного рисунка RLE |