результат выкачки потока разочаровывает, это нормально? - PullRequest
0 голосов
/ 23 декабря 2011

Я пытаюсь сжать файлы изображений для отправки по сети, вот мой тестовый метод сжатия

public void compress(MemoryStream inStream)
    {
        using (MemoryStream outStream = new MemoryStream())
        {
            using (DeflateStream deflate = new DeflateStream(outStream, CompressionMode.Compress, true))
            {
                Console.WriteLine(inStream.Length);
                deflate.Write(inStream.GetBuffer(), 0, (int)inStream.Length);
                deflate.Close();
                Console.WriteLine(outStream.Length);

            }
        }

    }

результат был

375531

354450

Я думал, что при сжатии, по крайней мере, я должен получить 5 цифр вместо 6, это нормально?я правильно делаю?

Заранее спасибо

1 Ответ

3 голосов
/ 23 декабря 2011

Вы, вероятно, пытаетесь сжать поток, который не может быть сжат дальше.

Например, форматы изображений с потерями, такие как JPEG, обычно содержат очень мало избыточных данных, поэтому возможность сжатия с DeflateStream минимальна.

Обратите внимание, что DeflateStream предназначен для сжатия файлов на лету, когда поток читается или записывается, и не предполагает, что весь поток доступен во время процесса сжатия. В вашем примере весь поток находится в памяти, поэтому вы можете использовать другие «статические» стили сжатия.

Например, вы можете обнаружить, что вы добились лучших результатов при сжатии Zip: http://dotnetzip.codeplex.com - хорошая библиотека для этого.

Несмотря на это, для изображений, которые уже сжаты, ожидайте не лучше, чем ~ 15% сжатия.

...