Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;“最好的方法”;“共享屏幕”;过插座_C++ - Fatal编程技术网

C++ C++;“最好的方法”;“共享屏幕”;过插座

C++ C++;“最好的方法”;“共享屏幕”;过插座,c++,C++,在我当前的应用程序中,我需要共享skype或discord的屏幕,我不想使用外部LIB,但如果必须的话,我会使用 到目前为止,我一直在通过TCP套接字以缩小的位图形式发送屏幕截图,并每隔几毫秒重新绘制一次窗口,这当然是一项我从一开始就知道注定要失败的努力,有什么api可以拯救我吗 非常感谢您的帮助。虽然我自己还没有实现它,但我相信通常所做的是将屏幕分为16x16像素块。您可以保留上一个屏幕截图,拍摄一个新的屏幕截图,比较哪些块已更改,并仅发送其中已更改的16x16块 通过设置更改阈值,可以进一步

在我当前的应用程序中,我需要共享skype或discord的屏幕,我不想使用外部LIB,但如果必须的话,我会使用

到目前为止,我一直在通过TCP套接字以缩小的位图形式发送屏幕截图,并每隔几毫秒重新绘制一次窗口,这当然是一项我从一开始就知道注定要失败的努力,有什么api可以拯救我吗


非常感谢您的帮助。

虽然我自己还没有实现它,但我相信通常所做的是将屏幕分为16x16像素块。您可以保留上一个屏幕截图,拍摄一个新的屏幕截图,比较哪些块已更改,并仅发送其中已更改的16x16块

通过设置更改阈值,可以进一步提高性能。如果在一个块中更改的像素少于x,则暂时不要发送。或者,如果一个块中变化的累积总和(对应像素之间的差值)低于某个阈值,则不要发送该块


块通常也会使用有损压缩方案进行压缩,该方案会缩小每个块需要发送的所需大小。图像块通常也以4:2:2模式发送,这意味着您以绿色通道一半的分辨率存储红色和蓝色通道。这是基于视觉系统的工作原理,但它解释了为什么在屏幕共享时,纯红色或纯蓝色的东西有时会变得块状或边缘化。

如果你不能使用外部库,你就有点麻烦了,因为肯定有人比单个程序员更有效地解决了这个问题。但简而言之,你不需要每次都发送整个屏幕;只需跟踪像素的变化并发送即可。另外,请使用UDP,因为TCP只会减慢速度。感谢您的UDP建议,好的,您会推荐哪些外部库?