最近搞一个小项目,需要截屏压缩为视频流,然后通过网络传送。
截屏部分用的是下列步骤:
getdc(0);
createcompatibledc;
createcompatiblebitmap;
selectobject;
bitblt;
GetDIBites(...,lpvBits,...);
然后以lpvBits为源,进行压缩。
这样做可以实现功能。但是由于每帧需要复制两次内存数据(bitblt时一次,GetDIBits时又一次,而且数据量大,数据量为屏幕宽高的乘积再乘以3这么多字节),我觉得效率低。
我一直再找能够减少一次内存复制的办法。如果能够在bitblt以后能取得位图的数据区地址,就可以减少一次。如果能取得屏幕位图的内存地址那就又省一次。各位给出出主意,看看有什么好办法提高效率。