QQ截屏的完美模拟
[write by TBWood-小汤 转载请说明出处http://blog.csdn.net/tbwood ]
至现在2011年2月15日,网上仍然没有一个能够在灰暗遮罩的功能上和即时效率上完美模拟QQ截屏的软件,以下的帖子和软件和QQ截屏相比都相差了太多。
http://download.csdn.net/source/2721924
http://www.vckbase.com/document/viewdoc/?id=1671
http://blog.csdn.net/laviewpbt/archive/2006/11/07/1370783.aspx
思考了30多天了,参照了很多基于VB,VC,DELPHI等文章(本人使用BCB的可视化程序开发),最恼人的是看完后发现还是不能满足自己的要求,甚至格格不入;最后还是得自己慢慢的用排除式研究法一点点的去尝试每一种可能性,其中几次都想放弃,我知道那是因为当天太累了,于是隔日在战,随着一天天的努力思考,今天终于攻破了软件的几大难点,接下来是一些修饰实现。在整个设计过程中,绕了很多弯,当然现在看起来,这些弯是必要的,也是很有价值的,促使我熟悉和掌握了很多知识。在这个软件设计开发过程中,主要需要解决的问题有
1. 窗口前置:我在csdn的博客文章里已经完整,详细的,网上无前例的解剖了这个功能的实现:
http://blog.csdn.net/TBWood/archive/2011/01/26/6165106.aspx
2. 蒙版效果:打开QQ截屏,会发现屏幕变暗。我们第一想到的就是用一定透明度的窗体来遮罩。这样效果确实很好,但是,问题就出来了,这样你会发现,你的程序的效率始终没有QQ那么完美,不要尝试安慰自己,一点点的差别都充分说明了实现方式的不同。
这时很多人想到了GDI+,至于我是怎么解决的,等完全完成后在论述。给大家提供一个思路:用窗口分析工具仔细的剖析QQ截屏。我为此还做了一个特定功能的窗口分析工具,以后有空再打包发布。
3. 八手柄Tracker效果:使用QQ截图时,会出现一个Tracker效果,八个手柄还能拖动,有人想到了Tracker:
http://www.vckbase.com/document/viewdoc/?id=1673
刚开始以为MFC里的CRectTracker是很神圣的东西,还研究了很久,想不通为什么它可以凌驾在图片上方画图,而不影响底下的图案。
有人说可以使用“pmXor”自己实现一个,在这,我可以很明确的否定这一方法,因为pmXor还是会影响背景图案的。这是一种二元光栅操作。
确实可以制作一个Tracker,在内存中把tracker层和背景图层分开,使用实时计算,添加和直接绘图的方式绘制到窗口上。
另外要说明的是,QQ截屏使用CRectTracker类后的效果并不好,延迟感严重。
4. 效率问题:每一次效率的偏差,都会让我怀疑整个设计的正确与否,这个问题是贯穿始终的。总之发现问题,不能安慰自己,要深入探究其深入的根源。在开发这个软件的过程重,大部分时间都是花在研究与本软件实现没有直接关系的问题。
GITHUB源码地址:TB_PrintScreen
致谢:
感谢我的父母,给了我良好的家庭坏境(大冬天,允许我整天整晚的开空调J)。感谢各位帮助过我的朋友和同学。最后感谢网上无数的先驱们,那些停下脚步,细细总结,为后人提供宝贵经验的人,都是好样的!
2017年12月20补充:后来QQ截屏进行了进一步升级,比如:自动识别文字区域,修改等。