Для примера возьмем 1-битовое (черно-белое) изображение высотой и шириной по 100 пикселов. Без режима сжатия программа сохраняет значение (ноль или единицу) каждого из 10000 пикселов изображения. Это все равно, что класть носки в комод, отмечая про себя: "Ага, здесь у меня один синий носок и один синий, один черный и один черный". Такое описание можно ужать наполовину: "Здесь пара синих носков и пара черных".
Метод RLE. Подобным же образом можно сгруппировать нули и единицы, сосчитав их количество в одном ряду (см. рис. 16.22). Представить это можно так: "В строке 34 нуля, затем 3 единицы, затем 55 нулей" и т. д. Этот метод называется Run Length Encoding (RLE), он автоматически используется на Маке при сохранении PICT-изображений (применяется он также и на факс-машинах). При сжатии и разжатии файла потерь данных здесь не происходит – на выходе мы получаем то же самое, что было на входе.
Метод LZW и код Хаффмана. Существуют и другие формы сжатия без потерь. Простые картинки с большими областями сплошных цветов RLE уплотняет до полного минимума, но более сложные изображения (например, в градациях серого) сжимаются не очень сильно. Механизм LZW (Lempel-Ziv-Welch) и код Хаффмана сводят до минимума общие строки данных.
Иначе говоря, они отслеживают не строки одинаковых цветов, а тенденцию. Натыкаясь на значение "010101", RLE не может выполнить сжатие. А код Хаффмана и LZW – достаточно разумные алгоритмы, чтобы вычислить тенденцию изменения символов и уплотнить информацию.