编写一个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截图工具的实现相关推荐

  1. 基于Java的截图工具

    源码及论文下载: http://www.byamd.xyz/tag/java/ 摘要 ​ 当今时代是飞速发展的信息时代,人们在对信息的处理中对图像的处理量与日俱增,这一点在文档人员上显得非常突出. 本 ...

  2. java图片切割类任务书_基于Java的截图工具(可储存编辑)的设计与实现毕业论文+任务书+翻译及原文+答辩PPT+源码+辅导视频...

    基于Java的截图工具(可储存编辑)的设计与实现 摘要 当今时代是飞速发展的信息时代,人们在对信息的处理中对图像的处理量与日俱增,这一点在文档人员上显得非常突出. 本软件采用Java语言进行模拟qq截 ...

  3. 网页截图工具CutyCapt

    网页截图工具CutyCapt CuteCapt是Kali Linux提供的一款网页截图工具.该工具运行在命令行中,可以将WebKit引擎解析的网页保存为图片.它保存的文件支持矢量图和位图两大类型,共1 ...

  4. Linux webkit截图,CutyCapt 跨平台使用 WebKit 内核网页截图工具 - 文章教程

    CutyCapt 是一个跨平台的命令行工具,用来捕获 WebKit 内核渲染的页面,可生成各种矢量图和位图格式,包括 PDF.SVG.PNG.JPEG.PS.TIFF.GIF.BMP 等.和 IECa ...

  5. java 打包工具_Java打包Windows安装程序

    目前对于开发Windows桌面程序而言,Java Swing并不是最好的选择,但是对于Java/Android程序员来说,Swing是最快上手和最容易熟悉的语言,和Android类似,Swing也提供 ...

  6. Java并发工具辅助类代码实例

    java中的并发工具类 一:等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. packag``.fuzhulei; import ja ...

  7. 截图工具(win+shift+S)截图之后为什么粘贴不上?有了这个方法,不用单独下载多次复制粘贴的工具了

    人生最大的遗憾就是一直在遗憾过去的遗憾. 截图工具(win+shift+S)截图之后粘贴不上的可能原因如下: 1.设置中根本没有打开自动保存的按钮: 2.还有一点原因是真想不到,有道词典打开之后win ...

  8. java开发工具(装机大全)

    文章目录 1. 快捷键 2. chrome插件:Talent api tester 3. chrome插件:cache killer 4. idea插件:SQL Params Setter 5. id ...

  9. html2canvas 一个强大的使用js开发的浏览器网页截图工具

    html2canvas是一个JavaScript类库,它使用了html5和css3的一些新功能特性,实现了在客户端对网页进行截图的功 能.html2canvas通过获取页面的DOM和元素的样式信息,并 ...

最新文章

  1. spring中的jdk动态代理(代码步骤)
  2. leetcode-350- 两个数组的交集 II
  3. hadoop学习5 搭建storm集群
  4. 数论中的无数公式 总结
  5. 赋能行业 共建生态 阿里巴巴首次亮相义乌标准展
  6. java多线程同步与测试_Java多线程同步Synchronized深入解析
  7. Java开发 基础三十条 初学必看
  8. 不能bostype没有元数据异常_金蝶EAS - BOS工作笔记
  9. windows系统: 解决ie谷歌浏览器证书错误.2021-05-27
  10. Latex论文下载学习教程
  11. 开启WIN10的卓越性能模式
  12. 【NOIP2017普及组】跳房子
  13. 字节跳动日常实习一二三面面经(后端开发)
  14. 重磅来袭!怎么用java编写app软件
  15. bootstrap4--概述与页面创建
  16. 挖掘机技术到底哪家强?这个问题终于有答案了!!
  17. 机试算法讲解:第26题 分解素因数
  18. java 拼音转汉字_用Java转化汉字为拼音全拼
  19. Linux多进程编程
  20. mysql数据库是的缩写_MYSQL数据库命名与其设计规范

热门文章

  1. 17分钟过桥 Java_java实现 n人过桥问题
  2. Oracle中如何获取系统当前时间
  3. Express 4.x中间件morgan(logger)的详细解析
  4. 第四章 分解方法及单口网络
  5. 如何用matlab画三维函数相交,如何用matlab绘制三元函数f=x^2 y^3 z^4在
  6. Android dimen集合(建议收藏)
  7. MATLAB/Simulink在控制系统仿真与CAD应用(一)
  8. d2admin框架学习
  9. 毕设学习之——数据集制作LabelImg安装
  10. HR软件如何识别保留优秀员工