在silverlight中压缩内存流

时间:2012-01-04 10:19:49

标签: c# silverlight zip

我使用SLsharpziplip尝试压缩字节[],然后再将其发送到服务器。 byte []包含已由jpeg编码器压缩的jpeg数据。

你可能会问,如果jpeg已经压缩了图像,为什么我需要更多地压缩它,因为我尝试了它并且它有效。

这是发生的事情:

我将byte []中的字节写入txt文件,txt文件的大小为~5k,我使用winzip压缩它,结果文件为~2k,因此文件大小减少了约50% 。但是,当我尝试使用byte []并使用slsharziplip来压缩byte []时,大小的减小是最小的。

这是我使用的代码:

 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);

                            } 

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

我做错了什么?!我误会了什么!!

在前面感谢:)

2 个答案:

答案 0 :(得分:1)

你没有比较喜欢。

压缩JPEG图像数据没有任何意义,因为它已经被压缩了。将其写入文本文件不会给你与将文件写入二进制文件相同的文件大小。

答案 1 :(得分:0)

可能不是,我认为WinZip对SLSharpZipLib有一个优秀的zip算法。您可以尝试改变压缩比,但除此之外,我会尝试不同的Silverlight兼容zip库。

您正确指出的JPEG已经是高度压缩的文件类型,因此找到可以找到进一步冗余的压缩算法将会很困难。

致以最诚挚的问候,