基于Swing实现的截屏工具

简介: 基于Swing实现的截屏工具

基于Swing实现的截屏工具


主要思路:


首先绘制截取到的屏幕,然后绘制mask层,根据用户鼠标选择,将选择区域的mask层像素设置


为完全透明,即不透明度为0,当不透明度为255时表示完全不透明。关于如何操作


BufferedImage像素参见这里:http://blog.csdn.net/jia20003/article/details/7279667


图示如下:

1339492064_4250.png


技术点详解:


1.       使用Javarobot类实现对屏幕的截取


2.       使用MouseListener与MouseMotionListener实现对用户鼠标操作的位置跟踪


3.       使用UI与控制分离的原则完成编码


4.       使用Java2D功能完成对选择区域的标识与像素提取


5.       使用以前的FullScreen功能实现全屏功能-http://blog.csdn.net/jia20003/article/details/6876995


6.       使用Swing的ToolKit类实现剪切板操作


7.       使用字体文件完成特殊字体显示功能


8.       通过对像素数据的透明度设置实现mask功能


关键代码解释:


实现Robot截屏的代码如下:


// Make a rectangle accordingto the size of the screen


Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize() );


//Take the screen snapshot


Robotrobot = new Robot();


return robot.createScreenCapture(rectangle);




实现Swing剪切板功能的代码如下:


CustomTransferabletransferable = new CustomTransferable(bi,1.0f);


Toolkit.getDefaultToolkit().getSystemClipboard().setContents(transferable,null);



实现图像保存的代码如下:


File outputfile =fileChooser.getSelectedFile();


System.out.println(outputfile.getAbsolutePath());


ImageIO.write(bi, "png", outputfile);



实现选择区域矩形获取与更新UI的代码如下:


endX = (int)event.getPoint().getX();


endY = (int)event.getPoint().getY();


if(startX > 0&& startY > 0 && (endX > startX) && (endY > startY)) {


int width = endX - startX;


int height = endY - startY;


mainView.updateView(new Rectangle(startX, startY, width,height));


}



创建Mask的代码如下:


Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();


int height = (int)screenSize.getHeight();


int width = (int)screenSize.getWidth();


maskImage = newBufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);


int[] pixels = newint[height *width];


int index = 0;


int ta = 0, tr = 0,tg = 0, tb = 0;


for(int row = 0; row< height; row++) {


for(int col = 0; col< width; col++) {


index = row * width + col;


ta = 255/2;


tr = Color.GRAY.getRed();


tg = Color.GRAY.getGreen();


tb = Color.GRAY.getBlue();


pixels[index] = (ta << 24) | (tr<< 16) | (tg << 8) | tb;


}


}


setRGB(maskImage, 0, 0, width,height, pixels);


有如下功能:


-         支持mask功能


-         直接截屏选取,类似QQ截屏选取功能


-         支持copy到系统剪切板


-         支持保存截屏为png或者jpg格式文件


-          支持鼠标文字添加-类似Windows Paint添加文字方式(新功能2012-06-19)



使用说明:


-         直接双击jar文件可以直接运行


-         如果你的winrar或者其它压缩工具关联了.jar文件,请右键选择Java图标运行


-         当点[Capture Screen]之后,变成全屏模式,只有按<Esc>键才会退出


-         当按<Esc>键退出时,鼠标选择区域的图像将会自动被显示在窗口中,如图所示:


程序启动界面:

1339492326_7693.png


完成截屏按<Esc>键返回窗口模式界面:

1339492356_5647.png


点击[SaveImage]按钮时候效果:

1339492391_5128.png


特别提示:运行该工具需要预先安装JRE6或JRE6以上版本运行环境


下载:可执行jar文件可以在这里下载使用(已经更新,速度更快):


http://download.csdn.net/detail/jia20003/4370539

相关文章
|
Java 机器人 BI
基于Swing实现的截屏工具
基于Swing实现的截屏工具 主要思路: 首先绘制截取到的屏幕,然后绘制mask层,根据用户鼠标选择,将选择区域的mask层像素设置 为完全透明,即不透明度为0,当不透明度为255时表示完全不透明。
1018 0
|
iOS开发
iOS开发UI篇—Quartz2D使用(截屏)
iOS开发UI篇—Quartz2D使用(截屏) 一、简单说明 在程序开发中,有时候需要截取屏幕上的某一块内容,比如捕鱼达人游戏。如图:   完成截屏功能的核心代码:- (void)renderInContext:(CGContextRef)ctx;调用某个view的layer的renderI...
834 0
|
文字识别 数据处理 C++
使用.NET开发一个屏幕OCR工具
本文将介绍使用.NET开发的一款桌面截图 OCR 工具,软件已开源,地址:[https://github.com/sangyuxiaowu/Snipping_OCR](https://github.com/sangyuxiaowu/Snipping_OCR)
250 0
使用.NET开发一个屏幕OCR工具
编写一个uiautomatorview截屏获取.uix工具
有的时候因为电脑的某些原因,uiautomatorview不好用了,无法启动,无法使用,各种改环境也无济于事。 有的人会尝试使用weditor,亦或是一直使用的是appium自带的定位工具。
250 0
编写一个uiautomatorview截屏获取.uix工具
|
容器 算法 Linux
开发一个Swing功能时的一点总结
对JTextField进行效验,有两个途径:(1)是使用javax.swing.InputVerifier在获取焦点时进行校验(2)在点击“确定”按钮的监听事件中对控件的值进行校验鉴于涉及的业务比较多,代码结构已经确定,如果在“确定”按钮的监听事件中进行效验,需要增加一个步骤,并且并不是所有的业务都需要这个效验,就倾向于使用javax.swing.InputVerifier进行,这样做有两个好处,(1)分离业务逻辑与前端 (2)代码更优雅javax.swing.InputVerifier用的不多,用了之后发现这个控件的特性和以前UE的不同:“校验器并非问题很安全。
863 0
|
2月前
|
存储 IDE Java
漂亮不是梦!Java Swing美化攻略
Java Swing 是一个为 Java 设计的 GUI 工具包,提供文本框、按钮等组件。尽管其外观可定制,通过 Look and Feel(LAF)机制改变应用风格,如 Darcula 和 FlatLaf,但现已淡出主流视野,主要应用于 IDE 领域,如 IntelliJ IDEA 和 Eclipse。相比其他 GUI 框架,Swing 的发展前景有限。
84 1
|
C# Windows
c# wpf 利用截屏键实现截屏功能
原文:c# wpf 利用截屏键实现截屏功能     最近做一个wpf程序需要截图功能,查找资料费了一些曲折,跟大家分享一下。
1434 0
|
Java Android开发
回顾Swing的一些内容
以前觉得java swing没什么好搞的,用的也不是很多,就很久都没弄过它了,最近因为一个朋友找我帮忙,就又开始弄了下swing,发现有比较多的东西以前知道的现在都有点模糊了,下面就做个简单的笔记:   设置JFrame的标志: this.
791 0
|
容器
swing用布局管理实现QQ登录界面 2.0(以及swing控件的一些基本的设置、鼠标事件等等花样的总结)
swing用布局管理实现QQ登录界面 2.0(以及swing控件的一些基本的设置、鼠标事件等等花样的总结)
254 0
swing用布局管理实现QQ登录界面 2.0(以及swing控件的一些基本的设置、鼠标事件等等花样的总结)

热门文章

最新文章