2012-01-04 3 views
1

im SLsharpziplipを使用してネットワークに送信する前にバイト[]を圧縮しようとしました。 byte []に​​はすでにjpegエンコーダによって圧縮されたjpegデータが含まれています。シルバーライトでメモリストリームを圧縮する

jpegがすでにイメージを圧縮している場合は、なぜそれを圧縮する必要がありますか?ここ

は何が起こったかである:

私は5K〜txtファイルのサイズは、txtファイルに[]バイトでバイトを書いて、私はWinZipのとそれを圧縮し、結果ファイルは〜2Kましたファイルサイズが約50%削減されます。しかし、私はバイト[]でそれをやろうとし、slsharziplipを使ってバイト[]を圧縮しようとすると、サイズの縮小は最小限に抑えられます。ここ

は私が使用するコードです:

MemoryStream msCompressed = new MemoryStream(); 

GZipOutputStream gzCompressed = new GZipOutputStream(msCompressed); 

gzCompressed.SetLevel(9); 

    // allframes is a byte array. 

    gzCompressed.Write(allframes, 0, allframes.Length); 

    gzCompressed.Finish(); 

    gzCompressed.IsStreamOwner = false; 

    gzCompressed.Close(); 

    // i used byte[] compresseddata = msCompressed.ToArray() but i   thought i'll try this too. 

    msCompressed.Seek(0, SeekOrigin.Begin); 

    byte[] compresseddata = new byte[msCompressed.Length]; 

    msCompressed.Read(compresseddata, 0, compresseddata.Length); 

================================ ==========================================

コードのデバッグから、私はallframes.Lengthとcompresseddata.lenghtの間のサイズの違いが最小限であることが分かります。同じデータがテキストファイルに書き込まれ、winzipで圧縮された場合、そのサイズは50%縮小されます。

これは私がtxtファイルに同じデータを書き込む方法です:

 TextWriter tw = new StreamWriter(MainPage.fs); // fs is a filestream. 

          foreach (byte b in allframes) 

          { 

           tw.Write(b); 

          } 

========================== ========================================== ===

私は何か間違っているのですか?私は何かを誤解しています!アップフロント:)

答えて

0

感謝はおそらく、私はWinZipのはSLSharpZipLibに優れたzipアルゴリズムを持っている想像ではありません。あなたは圧縮率を変えてみることができますが、それ以外の場合は、私は別のSilverlight互換のzipライブラリを試してみましょう。

JPEGは既に非常に圧縮されたファイルタイプであるため、さらに冗長性を見つける圧縮アルゴリズムを見つけるのは難しいでしょう。

よろしくお願いします。

1

あなたはlikeと似ていません。

既に圧縮されているので、JPEG画像データを圧縮することに意味はありません。テキストファイルに書き出しても、バイナリファイルに書き込むのと同じファイルサイズにはなりません。

関連する問題