Разделы
О сайте
Услуги
Соглашение
Проекты
FAQ
Исходники
Доки
Алгоритмы
Форматы
Download
Ссылки
Заказать
Форум
Гостевая
 
Алгоритмы

Алгоритм RLE

Первый вариант алгоритма Данный алгоритм необычайно прост в реализации. Групповое кодирование — от английского Run Length Encoding (RLE) — один из самых старых и самых простых алгоритмов архивации графики. Изображение в нем (как и в нескольких алгоритмах, описанных ниже) вытягивается в цепочку байт по строкам растра. Само сжатие в RLE происходит за счет того, что в исходном изображении встречаются цепочки одинаковых байт. Замена их на пары <счетчик повторений, значение> уменьшает избыточность данных. Алгоритм декомпрессии при этом выглядит так: Initialization(...); do {     byte = ImageFile.ReadNextByte();     if(является счетчиком(byte)) {         counter = Low6bits(byte)+1;         value = ImageFile.ReadNextByte();         for(i=1 to counter)             DecompressedFile.WriteByte(value)         }     else {         DecompressedFile.WriteByte(byte) } while(ImageFile.EOF()); В данном алгоритме признаком счетчика (counter) служат единицы в двух верхних битах считанного файла: Соответственно оставшиеся 6 бит расходуются на счетчик, который может принимать значения от 1 до 64. Строку из 64 повторяющихся байтов мы превращаем в два байта, т.е. сожмем в 32 раза. Алгоритм рассчитан на деловую графику — изображения с большими областями повторяющегося цвета. Ситуация, когда файл увеличивается, для этого простого алгоритма не так уж редка. Ее можно легко получить, применяя групповое кодирование к обработанным цветным фотографиям. Для того, чтобы увеличить изображение в два раза, его надо применить к изображению, в котором значения всех пикселов больше двоичного 11000000 и подряд попарно не повторяются. Данный алгоритм реализован в формате PCX. Второй вариант алгоритма Второй вариант этого алгоритма имеет больший максимальный коэффициент архивации и меньше увеличивает в размерах исходный файл. Алгоритм декомпрессии для него выглядит так: Initialization(...); do {     byte = ImageFile.ReadNextByte();     counter = Low7bits(byte)+1;     if(если признак повтора(byte)) {         value = ImageFile.ReadNextByte();         for (i=1 to counter)         CompressedFile.WriteByte(value)     }     else {     for(i=1 to counter){         value = ImageFile.ReadNextByte();         CompressedFile.WriteByte(value)     }     CompressedFile.WriteByte(byte) } while(ImageFile.EOF()); Признаком повтора в данном алгоритме является единица в старшем разряде соответствующего байта: Как можно легко подсчитать, в лучшем случае этот алгоритм сжимает файл в 64 раза (а не в 32 раза, как в предыдущем варианте), в худшем увеличивает на 1/128. Средние показатели степени компрессии данного алгоритма находятся на уровне показателей первого варианта. Похожие схемы компрессии использованы в качестве одного из алгоритмов, поддерживаемых форматом TIFF, а также в формате TGA. * * Характеристики алгоритма RLE: Коэффициенты компрессии: Первый вариант: 32, 2, 0,5. Второй вариант: 64, 3, 128/129. (Лучший, средний, худший коэффициенты) Класс изображений: Ориентирован алгоритм на изображения с небольшим количеством цветов: деловую и научную графику. Симметричность: Примерно единица. Характерные особенности: К положительным сторонам алгоритма, пожалуй, можно отнести только то, что он не требует дополнительной памяти при архивации и разархивации, а также быстро работает. Интересная особенность группового кодирования состоит в том, что степень архивации для некоторых изображений может быть существенно повышена всего лишь за счет изменения порядка цветов в палитре изображения. Код прислал Вася Пупкин. :)


 


Рейтинг@Mail.ru be number one Submitter.ru - Promoting!
Хостинг от uCoz