ZLIB压缩性能测试:
图像大小 40次平均时间(单位ms)
1366*768 112
683*384 31
1366*1 1
341*192 11
如何才能提高性能呢?或者使用其它的压缩库或者算法。
按道理一般的屏幕监控应用都是使用这种思路:截屏-压缩-发送
既然这样,在压缩这一环节,不可能容忍这种效率吧。
12 个解决方案
#1
前后两个图比较一下,只发送内容发生变化的矩形
#2
#3
图像压缩不要用zlib,压缩效率不好不说,还浪费CPU,
图像压缩一般都是倾向于有损压缩,比如4MB的BMP图像,可以压缩成几百KB的JPG图像
图像压缩一般都是倾向于有损压缩,比如4MB的BMP图像,可以压缩成几百KB的JPG图像
#4
无损压缩肯定慢,可以考虑jpeg压缩方式。
或者你可以试试mini_lzo这个开源库。效率比zlib高n倍
或者你可以试试mini_lzo这个开源库。效率比zlib高n倍
#5
也有专用于图片的无损压缩算法,而且效率也很好。到Google一搜,一把一把的。
#6
你看看直接用jpg文件是不是会有一些
没必要用bmp压缩吧
没必要用bmp压缩吧
#7
都行。从屏幕上截下来的是bmp位图,需要经过压缩然后传输到客户端进行显示。我现在有两种情况:
一、将截屏下来的位图直接用zlib库进行压缩,然后传输到客户端,客户端再解压缩然后显示。这个方法的效果是:压缩率一般,压缩时间太多;在客户端还要解压缩,费事。
二、将截屏下来的位图先与前一位置的位图进行XOR运算,然后将结果经zlib库压缩,再传输,客户端逆操作。这个方法的效果是:XOR用掉10ms(1366*768)左右的时间,压缩率大大提升,压缩时间减少了点。可是总的来说效果还是不行。
#8
我的意思是截图保存成jpg
然后直接传jpg
然后直接传jpg
#9
用DX的D3DXSaveSurfaceToFileInMemory,截屏加保存为jpg格式,压缩率不错,不过速度一般。
#10
BitBlt有xor的功能
你比较一下你那里网络每秒能传多少数据,cpu每秒能处理多少数据,然后解一个优化问题使得总时间最小
你比较一下你那里网络每秒能传多少数据,cpu每秒能处理多少数据,然后解一个优化问题使得总时间最小
#11
#12
如果单指压缩算法,最好别用zlib。压缩速度太慢。
mini_lzo这个算法不错。在1.6G主频的机器上可以达到50mbit/s的速率。
mini_lzo这个算法不错。在1.6G主频的机器上可以达到50mbit/s的速率。
#1
前后两个图比较一下,只发送内容发生变化的矩形
#2
#3
图像压缩不要用zlib,压缩效率不好不说,还浪费CPU,
图像压缩一般都是倾向于有损压缩,比如4MB的BMP图像,可以压缩成几百KB的JPG图像
图像压缩一般都是倾向于有损压缩,比如4MB的BMP图像,可以压缩成几百KB的JPG图像
#4
无损压缩肯定慢,可以考虑jpeg压缩方式。
或者你可以试试mini_lzo这个开源库。效率比zlib高n倍
或者你可以试试mini_lzo这个开源库。效率比zlib高n倍
#5
也有专用于图片的无损压缩算法,而且效率也很好。到Google一搜,一把一把的。
#6
你看看直接用jpg文件是不是会有一些
没必要用bmp压缩吧
没必要用bmp压缩吧
#7
都行。从屏幕上截下来的是bmp位图,需要经过压缩然后传输到客户端进行显示。我现在有两种情况:
一、将截屏下来的位图直接用zlib库进行压缩,然后传输到客户端,客户端再解压缩然后显示。这个方法的效果是:压缩率一般,压缩时间太多;在客户端还要解压缩,费事。
二、将截屏下来的位图先与前一位置的位图进行XOR运算,然后将结果经zlib库压缩,再传输,客户端逆操作。这个方法的效果是:XOR用掉10ms(1366*768)左右的时间,压缩率大大提升,压缩时间减少了点。可是总的来说效果还是不行。
#8
我的意思是截图保存成jpg
然后直接传jpg
然后直接传jpg
#9
用DX的D3DXSaveSurfaceToFileInMemory,截屏加保存为jpg格式,压缩率不错,不过速度一般。
#10
BitBlt有xor的功能
你比较一下你那里网络每秒能传多少数据,cpu每秒能处理多少数据,然后解一个优化问题使得总时间最小
你比较一下你那里网络每秒能传多少数据,cpu每秒能处理多少数据,然后解一个优化问题使得总时间最小
#11
#12
如果单指压缩算法,最好别用zlib。压缩速度太慢。
mini_lzo这个算法不错。在1.6G主频的机器上可以达到50mbit/s的速率。
mini_lzo这个算法不错。在1.6G主频的机器上可以达到50mbit/s的速率。