java截图工具的实现
编写一个java截图小程序。思路:
创建一个全屏的窗体,获取屏幕像素设置为窗体内容。再监听鼠标事件,根据鼠标在屏幕上移动的坐标点计算区域,再次获取屏幕像素,写到本地文件中。
代码分为两部分,具体如下:
ShotScreenMain.java
/*** @author 明月依希* 截屏主方法**/
public class ShotScreenMain {public static void main(String[] args) {ShotScreenWin win = new ShotScreenWin();}
}
ShotScreenWin.java
/*** @author 明月依希* 创建一个全屏的窗体,再去掉整个窗体的装饰,即取消关闭,最小/大化,* 边框,并截取整个屏幕的像素,然后在窗体中显示。最后通过鼠标监听* 事件,将制定区域的像素保存到桌面。**/
public class ShotScreenWin extends JFrame{private static final long serialVersionUID = 1L;private Dimension d;//Dimension 类封装单个对象中组件的宽度和高度(精确到整数)private JLabel imageLabel;//覆盖窗体的图片标签private Point point_holder,point_release;//按下鼠标时的坐标与释放鼠标后的坐标,依此计算截屏区域public ShotScreenWin() {d = Toolkit.getDefaultToolkit().getScreenSize();//获取整个屏幕大小setUndecorated(true);//禁用窗体装饰,不显示标题栏,关闭,最小化等setSize(d);//设置窗体全屏BufferedImage screenshot = snapShot(0,0,(int)d.getWidth(),(int)d.getHeight());//缓冲图片数据imageLabel = new JLabel(new ImageIcon(screenshot));//根据图片缓冲构造图片,设为标签,使窗体即为全屏幕像素add(imageLabel);//添加标签addMouseListener(new ShotListenerMouse());//鼠标点击监听// addMouseMotionListener(new ShotListenerMotion());//鼠标拖动监听,绘制选区。。。未完成setVisible(true);//设置窗体为可见。默认不可见}/*** 根据参数计算区域,实现截图并保存到桌面* @param point_holder * @param point_release*/private void snapShot(Point point_holder, Point point_release) {
// 获取屏幕数据的缓冲流BufferedImage screen = snapShot(point_holder.x, point_holder.y, point_release.x - point_holder.x, point_release.y - point_holder.y);String formatname = "jpg";//后缀名// javascreen -- jscString filename="jsc"+System.currentTimeMillis()+"."+formatname;//设置图片文件名
// 注释掉对话框方法
// File dir = shotDialog(filename);File dir = FileSystemView.getFileSystemView().getHomeDirectory();//桌面路径File file = new File(dir,filename);//创建一个新 File 实例System.out.print("图片:"+filename);try {
// 使用支持给定格式的任意 ImageWriter 将一个图像写入 File。如果已经有一个 File 存在,则丢弃其内容ImageIO.write(screen,formatname, file);//将图片保存到桌面} catch (IOException e) {e.printStackTrace();}System.out.print("\r...保存完毕!");}/*** 获取屏幕区域的像素* @param i 起始点x坐标* @param j 起始点y坐标* @param width 到达终点时宽度* @param height 到达终点时高度* @return*/private BufferedImage snapShot(int i, int j, int width, int height) {BufferedImage screenshot = null;try {screenshot = (new Robot()).createScreenCapture(newRectangle(i,j,width,height));} catch (AWTException e) {e.printStackTrace();}return screenshot;}private class ShotListenerMouse implements MouseListener {@Overridepublic void mouseClicked(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) { }@Overridepublic void mousePressed(MouseEvent e) {point_holder = e.getPoint();System.out.println(point_holder.x+ "\r"+point_holder.y);}@Overridepublic void mouseReleased(MouseEvent e) {point_release = e.getPoint();snapShot(point_holder,point_release);System.exit(0);}}/*** 暂未使用的方法* 方法实现:保存图片时弹出对话框* @param filename* @return 文件路径*/private File shotDialog(String filename) {if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") != -1){try {UIManager.setLookAndFeel("com.jtattoo.plaf.aluminium.AluminiumLookAndFeel");} catch (ClassNotFoundException | InstantiationException| IllegalAccessException | UnsupportedLookAndFeelException e) {// TODO Auto-generated catch blocke.printStackTrace();}}File filedir = new File(filename);JFileChooser chooser = new JFileChooser();chooser.setDialogTitle("保存");chooser.setFileSelectionMode(2);chooser.setSelectedFile(filedir);int state = chooser.showDialog(null, "保存");SwingUtilities.updateComponentTreeUI(chooser);if (state == 0) {filedir = chooser.getSelectedFile().getAbsoluteFile();if (filedir == null){Object[] options1 = { "确定", "取消" };JOptionPane.showOptionDialog(null, "路径不存在,是否保存到默认位置:\n d:/xiaobai?", "提示", 0, 1, null, options1, options1[0]);int sta = 0;if (sta == 0) {filedir = new File("d:\\xiaobai");}}}return filedir;}
}
总结:
程序虽然成功运行,能够对屏幕进行截屏操作,但由于经过两次截屏,截取的图片像素损失比较多,噪点也明显。并且程序没有设计出拖动鼠标截屏时绘制选区的功能。还需要后续的改进。
java截图工具的实现相关推荐
- 基于Java的截图工具
源码及论文下载: http://www.byamd.xyz/tag/java/ 摘要 当今时代是飞速发展的信息时代,人们在对信息的处理中对图像的处理量与日俱增,这一点在文档人员上显得非常突出. 本 ...
- java图片切割类任务书_基于Java的截图工具(可储存编辑)的设计与实现毕业论文+任务书+翻译及原文+答辩PPT+源码+辅导视频...
基于Java的截图工具(可储存编辑)的设计与实现 摘要 当今时代是飞速发展的信息时代,人们在对信息的处理中对图像的处理量与日俱增,这一点在文档人员上显得非常突出. 本软件采用Java语言进行模拟qq截 ...
- 网页截图工具CutyCapt
网页截图工具CutyCapt CuteCapt是Kali Linux提供的一款网页截图工具.该工具运行在命令行中,可以将WebKit引擎解析的网页保存为图片.它保存的文件支持矢量图和位图两大类型,共1 ...
- Linux webkit截图,CutyCapt 跨平台使用 WebKit 内核网页截图工具 - 文章教程
CutyCapt 是一个跨平台的命令行工具,用来捕获 WebKit 内核渲染的页面,可生成各种矢量图和位图格式,包括 PDF.SVG.PNG.JPEG.PS.TIFF.GIF.BMP 等.和 IECa ...
- java 打包工具_Java打包Windows安装程序
目前对于开发Windows桌面程序而言,Java Swing并不是最好的选择,但是对于Java/Android程序员来说,Swing是最快上手和最容易熟悉的语言,和Android类似,Swing也提供 ...
- Java并发工具辅助类代码实例
java中的并发工具类 一:等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. packag``.fuzhulei; import ja ...
- 截图工具(win+shift+S)截图之后为什么粘贴不上?有了这个方法,不用单独下载多次复制粘贴的工具了
人生最大的遗憾就是一直在遗憾过去的遗憾. 截图工具(win+shift+S)截图之后粘贴不上的可能原因如下: 1.设置中根本没有打开自动保存的按钮: 2.还有一点原因是真想不到,有道词典打开之后win ...
- java开发工具(装机大全)
文章目录 1. 快捷键 2. chrome插件:Talent api tester 3. chrome插件:cache killer 4. idea插件:SQL Params Setter 5. id ...
- html2canvas 一个强大的使用js开发的浏览器网页截图工具
html2canvas是一个JavaScript类库,它使用了html5和css3的一些新功能特性,实现了在客户端对网页进行截图的功 能.html2canvas通过获取页面的DOM和元素的样式信息,并 ...
最新文章
- spring中的jdk动态代理(代码步骤)
- leetcode-350- 两个数组的交集 II
- hadoop学习5 搭建storm集群
- 数论中的无数公式 总结
- 赋能行业 共建生态 阿里巴巴首次亮相义乌标准展
- java多线程同步与测试_Java多线程同步Synchronized深入解析
- Java开发 基础三十条 初学必看
- 不能bostype没有元数据异常_金蝶EAS - BOS工作笔记
- windows系统: 解决ie谷歌浏览器证书错误.2021-05-27
- Latex论文下载学习教程
- 开启WIN10的卓越性能模式
- 【NOIP2017普及组】跳房子
- 字节跳动日常实习一二三面面经(后端开发)
- 重磅来袭!怎么用java编写app软件
- bootstrap4--概述与页面创建
- 挖掘机技术到底哪家强?这个问题终于有答案了!!
- 机试算法讲解:第26题 分解素因数
- java 拼音转汉字_用Java转化汉字为拼音全拼
- Linux多进程编程
- mysql数据库是的缩写_MYSQL数据库命名与其设计规范
热门文章
- 17分钟过桥 Java_java实现 n人过桥问题
- Oracle中如何获取系统当前时间
- Express 4.x中间件morgan(logger)的详细解析
- 第四章 分解方法及单口网络
- 如何用matlab画三维函数相交,如何用matlab绘制三元函数f=x^2 y^3 z^4在
- Android dimen集合(建议收藏)
- MATLAB/Simulink在控制系统仿真与CAD应用(一)
- d2admin框架学习
- 毕设学习之——数据集制作LabelImg安装
- HR软件如何识别保留优秀员工