0

画像ファイルを圧縮してネットワーク経由で送信しようとしています。これが私のテスト圧縮方法です。

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

少なくとも圧縮するときは、6桁ではなく5桁にする必要があると思いましたが、これは正常ですか?私はそれを正しくやっていますか?

前もって感謝します

4

1 に答える 1

3

これ以上圧縮できないストリームを圧縮しようとしている可能性があります。

たとえば、JPEGのような不可逆画像形式には通常、冗長データがほとんどないため、圧縮する機能DeflateStreamは最小限に抑えられます。

これDeflateStreamは、ストリームの読み取りまたは書き込み中にオンザフライでファイルを圧縮することを目的としており、圧縮プロセス中にストリーム全体が使用可能であるとは想定していないことに注意してください。この例では、ストリーム全体がメモリにあるため、他の「静的」スタイルの圧縮を使用できます。

たとえば、Zip圧縮を使用するとより良い結果が得られる場合があります。http://dotnetzip.codeplex.comは、このための評判の高いライブラリです。

それでも、すでに圧縮されている画像の場合、最大15%の圧縮を期待してください。

于 2011-12-23T08:03:42.720 に答える