2012-05-15 4 views
0

Здесь у меня есть двоичный файл, и мне нужно, чтобы сжать его с помощью кодирования длин серий RLE .Я использовал регулярный алгоритм RLE и используя максимальное количество равно 16.Как применить RLE в двоичном изображении?

Вместо того, чтобы уменьшить размер файла, он увеличивает его. Например, матрица 5 * 5, 10 значений, повторяющих счет, равны единице, что делает файл больше.

Как избежать этого сбоя? Есть ли лучший способ применить RLE частично к матрице?

+0

Можете ли вы дать нам код, который вы используете для RLE? – kitchenette

+2

Из wikipedia: _It не полезно в файлах, которые не имеют много запусков, так как это может значительно увеличить размер файла. Вероятно, это причина, можете ли вы также показать изображение, которое вы пытались сжать? –

ответ

0

Если вы используете для своего собственного использования, вы можете создать свой собственный формат файла изображения, а в заголовке вы можете отметить, используется ли RLE или нет, а также диапазон координат X и Y и возможные битовые плоскости, для которых Это использовано. Но если вы хотите создать файл изображения, который следует за определенным форматом файла изображений, который использует RLE (.pcx), вы должны следовать спецификациям формата файла. Если я правильно помню, в .pcx не было возможности частично отключить RLE.

Если вы не обязаны использовать RLE, и вы ищете только простой способ сжатия, прежде чем использовать какое-либо сжатие, я предлагаю вам сначала проверить, сколько байтов берет ваш двоичный файл матрицы 5x5. Если размер файла составляет 25 байт или более, вы сохраняете его, используя по крайней мере один байт (8 бит) для каждого элемента (или, альтернативно, у вас много данных, которые не являются содержимым матрицы). Если вам не нужно сохранять размер, двоичная матрица 5x5 принимает 25 бит, что составляет 4 байта и 1 бит, поэтому практически 5 байтов. Я совершенно уверен, что нет метода сжатия, который обычно полезен для файлов размером 5 байт. Если у вас есть матрицы разных размеров, вы можете использовать, например. беззнаковые целочисленные 16-битные поля (по 2 байта) для максимального размера матрицы по горизонтали/вертикали 65535 или беззнаковых целочисленных 32-битных полей (по 4 байта) для максимального размера матрицы по горизонтали/вертикали 4294967295.

Например, 100x100 двоичный матрица принимает 10000 бит, что составляет 1250 байт. Добавьте 2 x 2 = 4 байта для 16-разрядных полей размера или 2 x 4 = 8 байтов для 32-разрядных полей размера. После этого вы можете планировать, какой будет лучший метод сжатия.

Смежные вопросы