Существует два варианта алгоритма. Сначала рассмотрим первый вариант.
Данный
алгоритм необычайно прост в реализации. Групповое кодирование (от английского
Run Length Encoding (RLE)) - один из самых старых и самых простых алгоритмов
архивации графики. Изображение в нем вытягивается в цепочку байт по строкам
растра. Само сжатие в RLE происходит за счет того, что в исходном изображении
встречаются цепочки одинаковых байт. Замена их на пары <счетчик повторений,
значение> уменьшает избыточность данных.
В данном
алгоритме признаком счетчика служат единицы в двух верхних битах считанного
файла. Соответственно оставшиеся 6 бит расходуются на счетчик, который может
принимать значения от 1 до 64. Строку из 64 повторяющихся байтов мы превращаем в
два байта, т.е. сожмем в 32 раза.
Алгоритм
рассчитан на деловую графику - изображения с большими областями повторяющегося
цвета. Ситуация, когда файл увеличивается, для этого простого алгоритма не так
уж редка. Ее можно легко получить, применяя групповое кодирование к обработанным
цветным фотографиям. Для того чтобы увеличить изображение в два раза, его надо
применить к изображению, в котором значения всех пикселей больше двоичного
11000000 и подряд попарно не повторяются.
Данный
алгоритм реализован в формате PCX.
Теперь
рассмотрим второй вариант алгоритма.
Второй
вариант этого алгоритма имеет больший максимальный коэффициент архивации и
меньше увеличивает в размерах исходный файл.
Признаком
повтора в данном алгоритме является единица в старшем разряде соответствующего
байта.
Как можно
легко подсчитать, в лучшем случае этот алгоритм сжимает файл в 64 раза (а не в
32 раза, как в предыдущем варианте), в худшем увеличивает на 1/128. Средние
показатели степени компрессии данного алгоритма находятся на уровне показателей
первого варианта.
Похожая
схема компрессии использована в качестве одного из алгоритмов, поддерживаемых
форматом TIFF, а также в формате TGA.