如何进一步压缩JPEG以通过Windows上的C / C ++ TCP流发送?

时间:2013-08-26 19:29:30

标签: c++ tcp screenshot

我正在创建自己的团队浏览器版本,您可以在其中向其他人展示您的屏幕,以便他们可以帮助您解决问题并提供支持。但是,我遇到了一个小问题。

首先,当我截取屏幕截图时,.BMP内存大约为1 MB。使用EncodingParams并将其转换为质量= 20的JPEG格式后,它降至92 kb。但是,我仍然认为这可能有点太大而不能经常发送流。

有什么方法可以减少图像的大小或任何一种方式,我可以减少网络密集度?我删除的每个字节都有助于加快连接速度,减少带宽。

如果有人能给我一些建议,我将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

使用低于20的质量,或者减小图像的尺寸。两者都会降低质量。但是没有任何明显的压缩技术可以在JPEG压缩图像上使用 - 它的大小就像它会得到的那么小(即使是高质量的JPEG也会压缩得很差,因为JPEG在压缩实际数据方面做得很好。图像,以及当压缩级别非常高时“破坏”像素。您可以通过拍摄大量JPEG图像并使用您喜欢的压缩程序(ZIP,GZIP,BZIP等)压缩它们来证明这一点。

您还可以减少图像中的颜色数量 - 256(8位)或64K(16位)图像将比16M(24/32位)图像压缩得更好。

其他明显的答案是只在一帧和另一帧之间发送差异 - 只要图片没有太大变化,这可以给你相当不错的好处 - 如果有人在玩“射击游戏”型游戏,当事物爆炸并且场景以50 fps变化时,它可能不会有太多帮助,但对于常规办公室类型的应用程序,改变每个帧的像素数可能是最小的。