(значение от 0 до 127 или 255). Второй байт группы содержит значение символа в группе,
которое находится в диапазоне от 0 до 255 и называется значением группы.
Несжатая символьная группа из 15 символов «А» обычно занимает 15 байт:
ААААААААААААААА
После RLE-кодирования та же строка займет всего два байта:
15А
Код 15А, сгенерированный для представления символьной строки называется RLE-
пакетом. Первый байт данного пакета (15) является счетчиком группы и содержит
количество повторений. Второй байт (А) служит значением группы и хранит повторяемое
значение.
Новый пакет генерируется каждый раз, когда изменяется группа или когда
количество символов в группе превышает максимальное значение счетчика.
Предположим, что наша 15-символьная строка теперь содержит четыре различных
символьных группы:
AAAAAAbbbXXXXXt
Применив групповое кодирование, мы сможем сжать ее в 4 двухбайтовых пакета:
6A3b5X1t
Таким образом, в результате группового кодирования 15-байтовая строка станет
занимать только 8 байт. В данном случае групповое кодирование позволило получить
степень сжатия, примерно равную 2:1.
В определенных типах данных длинные группы встречаются крайне редко.
Например, текст в формате ASCII редко включает длинные группы. В предыдущем
примере последняя группа (содержащая символ «t») имеет единичную длину, тем не
менее, это все же группа, следовательно, счетчик группы и значение группы будут
записаны в два байта. Для кодирования группы в RLE требуется как минимум два байта,
поэтому группы из одиночных символов займут больше памяти.
Схемы RLE просты и быстры, но эффективность сжатия зависит от типа данных
изображения, подлежащего кодированию. Черно-белые изображения, содержащие
значительно больше белого цвета, кодируются очень хорошо, поскольку включают
большие объемы непрерывных данных постоянного цвета. Однако сложные изображения
с большим количеством цветов, типа фотографий, кодируются весьма плохо. Причиной
тому является сложность изображения, а именно большое количество различных цветов и
относительно малое количество групп одинакового цвета.
LZW-сжатие
Схема сжатия Лемпела – Зива – Велча (LZW) является одной из наиболее
распространенных в компьютерной графике. Этот метод сжатия данных без потерь
применяется в различных форматах файлов изображений, в частности GIF и TIFF, и
включен в стандарт сжатия для модемов V.42bis и PostScript Level 2.
В 1977 году Абрахамом Лемпелом и Джекобом Зивом был создан первый
компрессор из широко известного сегодня семейства компрессоров LZ. Алгоритмы
сжатия LZ77 широко использовались для сжатия текста, а также стали основой таких
архивирующих программ как compress, lha, zoo, pkzip и arj. Алгоритмы сжатия LZ78 более
часто применялись для сжатия двоичных данных, например растровых.
В 1984 году, являясь сотрудником Unisys, Терри Велч модифицировал компрессор
LZ78 с учетом применения высокоскоростных дисковых контроллеров. Полученный в
результате алгоритм LZW широко используется и сегодня.
Алгоритм LZW позволяет работать с любым типом данных. Он обеспечивает
достаточно быстрое сжатие и распаковку данных, не требуя при этом выполнения
операций с плавающей запятой. Благодаря тому, что LZW пишет сжатые данные байтами,