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

链接 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, , 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,,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进行一次压缩吧

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

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

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

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

05-11 20:24