• 屏幕截图的实现和源代码


    最近打算写一些入门相关的小应用程序开发实例,个人感觉学习程序开发,其关键的一步就是阅读源代码(RTFSC,呵呵),然后尝试自己动手编写。这里所谓的自己动手编写并不是让你照着源代码一句话一句的敲,也不是复制粘贴,而是阅读了源代码以后,学习其中的编程思想,然后加以应用,写出自己的程序,你可以在你阅读的源代码上增加功能或优化代码,或者就是在完全不看源代码的情况下,实现相同的功能。如果想学好程序开发,一定要强迫自己做到这样。


    接下来是一个屏幕截图小工具的实例,当初做这个小工具是因为公司不能连接Internet,平时我都是用QQ截图,后来公司没有安装,于是自己编写了一个屏幕截图小工具,也是第一次正式用C++编写应用程序。

    该程序的流程相当简单:

    1.快捷键按下后启动截图功能,这里需要用全局键盘钩子来捕获键盘输入。

    2.获取分辨率后,将屏幕截图(原始截图)拷贝到内存当中。

    3.拷贝一份屏幕截图,并且转换为灰度图。

    4.拷贝灰度图到显示设备当中。

    5.获取鼠标选择区域,并绘制矩形框,将原图当中,鼠标框选部分截图拷贝到显示设备当中。

    6.获取用户输入,如果是ESC,则重复步骤4,如果是双击或者Enter按下,则将框选部分的原图拷贝的剪贴板中,并释放资源,退出截图。

    上面的流程便实现了屏幕截图的基础功能,启动截图后,屏幕变为灰色,鼠标选中部分为彩色,然后确定截图,在C++的源代码中,我加入了系统托盘和截图快捷键。

    源代码两个,一个是CPP的实现版本,一个是C#的实现版本。需要VS2008打开。

    点击这里下载C#版本。

    点击这里下载CPP版本。

  • 相关阅读:
    gradle平级项目引用
    java使用ssh访问Linux的项目jscraft
    debian更新源时找不到公钥的解决办法
    debian系在线安装软件apt-get命令族
    vim打造开发IDE
    Mysql主从同步配置
    byte[] 转Hex String
    记录一次条件比较多的SQL查询语句
    LruCache的缓存策略
    LinkedHashMap的实现原理
  • 原文地址:https://www.cnblogs.com/sweetwxh/p/2121405.html
Copyright © 2020-2023  润新知