C#局域网桌面共享软件制作(三)

到周末了,继续做这个桌面共享软件,下面是前两篇的链接,

链接 C#局域网桌面共享软件制作(一) 

链接 C#局域网桌面共享软件制作(二) 

 

通过对图片进行压缩以后,每张图片大小38K左右(win7/1024*768),每秒网络流量175kb/s+。占用的网络还是很大,那我们可以再对其进行压缩。

压缩用的是.Net提供的GZipStream,需引入using System.IO.Compression; GZipStream的压缩比例大概是20%;

压缩:

public static byte[] Compress(byte[] bytes)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                GZipStream Compress = new GZipStream(ms, CompressionMode.Compress);
                Compress.Write(bytes, 0, bytes.Length);
                Compress.Close();
                return ms.ToArray();
            }
        }

解压:

public byte[] Decompress(Byte[] bytes,int len)//因为本例需求,我加了一个参数Len表示实际长度
        {
            try
            {
                using (MemoryStream tempMs = new MemoryStream())
                {
                    using (MemoryStream ms = new MemoryStream(bytes,0,len))
                    {
                        GZipStream Decompress = new GZipStream(ms, CompressionMode.Decompress);
                        Decompress.CopyTo(tempMs);
                        Decompress.Close();
                        return tempMs.ToArray();
                    }
                }
            }
            catch
            {
                return null;
            }
        }

需要说明的是解压后返回的流一定要判断是否为空,如果为空就丢弃

byte[] arr = Decompress(b,len);
if (arr == null)
    continue;

解释一下

C#局域网桌面共享软件制作(二)中CompressImage进行了第一次压缩,然后再用GZipStream进行第二次压缩

压缩后流量进一步减少,但是其显示的效果不是特别好(还是能看清楚),因为CompressImage方法是有损压缩,会失真。

如果想要高清画面,就不使用CompressImage,只用GZipStream进行一次压缩吧

下面是没有经过压缩的图片的大小样例

文章写的有点乱,请多包涵,如果以后还有其它方法,会继续添加

源代码链接http://download.csdn.net/detail/oyipiantian/7252741

posted @ 2014-04-20 09:57  波谷  阅读(2975)  评论(1编辑  收藏  举报