JDK 1.3中增加了一个Robot的类,内置了一个屏幕截取的方法[createScreenCapture],所以说对整个屏幕取图是一件很简单的事情。这里讨论一下如何实现对于屏幕某一鼠标拖选区域的屏幕截取。
网上java截屏的代码,都是调用Robot类的方法实现整个屏幕截取的,半天也没有找到关于鼠标拖动时进行区域截屏的代码。想了一下,还是可以实现的。问题的关键是在没有Java程序显示的情况下如何实现对鼠标的监听。这个比较难呀,不太清楚怎么实现,不过想到一个比较笨的方法:先将屏幕整个抓图保存下来,然后将图像显示个一个JFrame上,在JFrame内实现对区域抓屏。
猜测其他的抓图类的程序在选择了抓图操作后,整个界面好像锁定一样,所有程序都不再处理鼠标事件,貌似也是用的这种原理:用自己的面板以全屏的方式显示,以便遮挡住所有程序,同时将抓屏操作前的屏幕以图片的形式显示在自己的面板上,然后就可以在自己的面板上对抓屏得到的图像进行截取了。
程序设计的思路:
1、 选择了抓屏操作后,由Robot类对当前的整个屏幕进行截取操作,保存图像
2、将图像显示到一个JFrame上,因为要显示整个屏幕,所以JFrame要去掉所有的装饰,也就是说JFrame不能有标题栏,大小要和屏幕尺寸一样。 去掉JFrame的装饰可用下面的代码实现JFrame对象.setUndecorated(true)
3、因为在JFrame上要即要画屏幕的图像,又要在鼠标拖动时画出选择区域,为方便,将图像和选择区域放到两个不同的面板上完成绘制操作。两个面板层次位置可由JFrame内置的JLayeredPane实现,将两个面板放到JLayeredPane的不同的层上。
4、计算选择区域位置需要简单关注一下,这个不难。
5、为了方便操作,将抓图程序运行后入到系统托盘中。 这个用到了SystemTray和TrayIcon两个类。
因操作系统托盘的类类为JDK 1.6新增的,所以本文的代码只能在JDK 1.6上运行
代码已经更新,可以到下面文章对应的链接中下载。
[url]http://daimojingdeyu.iteye.com/admin/blogs/235539[/url]
网上java截屏的代码,都是调用Robot类的方法实现整个屏幕截取的,半天也没有找到关于鼠标拖动时进行区域截屏的代码。想了一下,还是可以实现的。问题的关键是在没有Java程序显示的情况下如何实现对鼠标的监听。这个比较难呀,不太清楚怎么实现,不过想到一个比较笨的方法:先将屏幕整个抓图保存下来,然后将图像显示个一个JFrame上,在JFrame内实现对区域抓屏。
猜测其他的抓图类的程序在选择了抓图操作后,整个界面好像锁定一样,所有程序都不再处理鼠标事件,貌似也是用的这种原理:用自己的面板以全屏的方式显示,以便遮挡住所有程序,同时将抓屏操作前的屏幕以图片的形式显示在自己的面板上,然后就可以在自己的面板上对抓屏得到的图像进行截取了。
程序设计的思路:
1、 选择了抓屏操作后,由Robot类对当前的整个屏幕进行截取操作,保存图像
2、将图像显示到一个JFrame上,因为要显示整个屏幕,所以JFrame要去掉所有的装饰,也就是说JFrame不能有标题栏,大小要和屏幕尺寸一样。 去掉JFrame的装饰可用下面的代码实现JFrame对象.setUndecorated(true)
3、因为在JFrame上要即要画屏幕的图像,又要在鼠标拖动时画出选择区域,为方便,将图像和选择区域放到两个不同的面板上完成绘制操作。两个面板层次位置可由JFrame内置的JLayeredPane实现,将两个面板放到JLayeredPane的不同的层上。
4、计算选择区域位置需要简单关注一下,这个不难。
5、为了方便操作,将抓图程序运行后入到系统托盘中。 这个用到了SystemTray和TrayIcon两个类。
因操作系统托盘的类类为JDK 1.6新增的,所以本文的代码只能在JDK 1.6上运行
代码已经更新,可以到下面文章对应的链接中下载。
[url]http://daimojingdeyu.iteye.com/admin/blogs/235539[/url]