论坛首页 Java企业应用论坛

Java实现屏幕截取程序(区域内截屏)

浏览 8843 次
精华帖 (0) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-08-31  
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上运行

代码已经更新,可以到下面文章对应的链接中下载。
http://daimojingdeyu.iteye.com/admin/blogs/235539
  • 描述: 运行效果图
  • 大小: 12.2 KB
  • screensnap.zip (3.6 KB)
  • 描述: Java区域抓图源代码
  • 下载次数: 718
   发表时间:2008-08-31  
1)Robot这个类1.3就有了
2)可以把那个JFrame设成全屏的
0 请登录后投票
   发表时间:2008-08-31  
谢谢bearice,第1)个问题偶搞错,现在已经改过。
问题2)将JFrame设置成全屏,是不是和偶用的方式一样?通过setUndecorated(true) 调用实现。
0 请登录后投票
   发表时间:2008-09-01  
设置全屏请参考:
java.awt.GraphicsDevice.setFullScreenWindow
0 请登录后投票
   发表时间:2008-09-04  
资料不错,我先收藏一下,回家了再重新下一下.新注册的帐号憋的难受.

另外问一下.是直接通过mouse拉取选择的么?
0 请登录后投票
   发表时间:2008-09-04  
强,这个是不是能在Linux上用啊?
0 请登录后投票
   发表时间:2008-09-04  
to:bearice 抓屏的话,不只要JFrame全屏,还要去掉窗口装饰,不然能看到窗口的标题栏。

to:JavaTestJava 在选择“抓屏”菜单后,就可以用鼠标进行拖动选择要抓区的区域了。
0 请登录后投票
   发表时间:2008-09-04  
to:robertpi  不知道是不是所有Linux都能用,只在Ubuntu的8.04上测试过,是可以的,不过从文档上来看是有些Linux系统不支持系统托盘的。不过不支持话,程序会提示~~~

最新的代码可以下面文章的链接中下载
http://daimojingdeyu.iteye.com/blog/235539
0 请登录后投票
   发表时间:2009-07-13  
请问web方式能实现远程桌面的控制吗?
0 请登录后投票
   发表时间:2009-07-18  
fwh3002 写道
请问web方式能实现远程桌面的控制吗?

这个不太容易呀
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics