当前位置: 首页 > 编程笔记 >

Java实现屏幕截图及剪裁

燕嘉颖
2023-03-14
本文向大家介绍Java实现屏幕截图及剪裁,包括了Java实现屏幕截图及剪裁的使用技巧和注意事项,需要的朋友参考一下

Java标准API中有个Robot类,该类可以实现屏幕截图,模拟鼠标键盘操作这些功能。这里只展示其屏幕截图。

  截图的关键方法createScreenCapture(Rectangle rect) ,该方法需要一个Rectangle对象,Rectangle就是定义屏幕的一块矩形区域,构造Rectangle也相当容易:

new Rectangle(int x, int y, int width, int height),四个参数分别是矩形左上角x坐标,矩形左上角y坐标,矩形宽度,矩形高度。截图方法返回BufferedImage对象,示例代码:

   /**
   * 指定屏幕区域截图,返回截图的BufferedImage对象
   * @param x
   * @param y
   * @param width
   * @param height
   * @return 
   */
   public BufferedImage getScreenShot(int x, int y, int width, int height) {
    BufferedImage bfImage = null;
    try {
      Robot robot = new Robot();
      bfImage = robot.createScreenCapture(new Rectangle(x, y, width, height));
    } catch (AWTException e) {
      e.printStackTrace();
    }
    return bfImage;
  }

 如果需要把截图保持为文件,使用ImageIO.write(RenderedImage im, String formatName, File output) ,示例代码:

   /**
   * 指定屏幕区域截图,保存到指定目录
   * @param x
   * @param y
   * @param width
   * @param height
   * @param savePath - 文件保存路径
   * @param fileName - 文件保存名称
   * @param format - 文件格式
   */
  public void screenShotAsFile(int x, int y, int width, int height, String savePath, String fileName, String format) {
    try {
      Robot robot = new Robot();
      BufferedImage bfImage = robot.createScreenCapture(new Rectangle(x, y, width, height));
      File path = new File(savePath);
      File file = new File(path, fileName+ "." + format);
      ImageIO.write(bfImage, format, file);
    } catch (AWTException e) {
      e.printStackTrace();  
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

 捕捉屏幕截图后,也许,我们需要对其剪裁。主要涉及两个类CropImageFilter和FilteredImageSource,关于这两个类的介绍,看java文档把。

   /**
   * BufferedImage图片剪裁
   * @param srcBfImg - 被剪裁的BufferedImage
   * @param x - 左上角剪裁点X坐标
   * @param y - 左上角剪裁点Y坐标
   * @param width - 剪裁出的图片的宽度
   * @param height - 剪裁出的图片的高度
   * @return 剪裁得到的BufferedImage
   */
  public BufferedImage cutBufferedImage(BufferedImage srcBfImg, int x, int y, int width, int height) {
    BufferedImage cutedImage = null;
    CropImageFilter cropFilter = new CropImageFilter(x, y, width, height); 
    Image img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(srcBfImg.getSource(), cropFilter)); 
    cutedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
    Graphics g = cutedImage.getGraphics(); 
    g.drawImage(img, 0, 0, null); 
    g.dispose(); 
    return cutedImage;
  }

如果剪裁后需要保存剪裁得到的文件,使用ImageIO.write,参考上面把截图保持为文件的代码。

 类似资料:
  • 在Linux下有很多屏幕载图的工具,下面简单介绍一下: 在GNOME桌面中自带了一个屏幕截图工具,位于“动作”栏内。该工具功能很少,只能截取当前屏幕。 在GMIP中也可截图,在“文件”--“获取”菜单下有一个“屏幕抓图”选项可进行屏幕截图。它可截取任意图窗口的内容,并自动输入到GMIP中,我们可方便地进行处理和保存。 安装ImageMagick软件,它有一个工具叫import可用于屏幕截图。该工具

  • 点击按钮进行截屏,可以将截屏图像保存到相册中。 作者说:听说会和苹果的策略有冲突,应用如果上架可能会被拒绝。这个估计是看人品了吧。经过测试发现,如果先弹出对话框,然后再截屏,似乎并不能把对话框也给保存下来。 [Code4App.com]

  • 我试图根据用户输入的坐标捕捉区域截图。基本上,用户在屏幕上点击得到x,y坐标,然后在其他地方点击另一对x,y坐标,然后将其放入一个矩形中,并使用机器人库创建屏幕截图。 我有的问题是,我得到了随机截图,这不是用户输入的坐标,我怎么能考虑包括0的坐标,因为矩形值必须超过1。 以下是我迄今为止的代码:

  • 本文向大家介绍Android 5.0及以上编程实现屏幕截图功能的方法,包括了Android 5.0及以上编程实现屏幕截图功能的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android 5.0及以上编程实现屏幕截图功能的方法。分享给大家供大家参考,具体如下: 在Android 5.0,API 21 之前想要截图系统屏幕必须Root才能完成,5.0之后开放了接口,下面看我们是怎么实现

  • 我正在使用Selenium和Chrome驱动程序来拍摄一个站点的屏幕截图,并将窗口尺寸设置为800x600。当我看到.png时,它比这个值更大,并且每个屏幕分辨率都有变化。差异大于滚动条,将其设置为捕获800x600,它将产生1179x704图像(我的监视器res是3840 x 2160)。这也会根据监视器上的分辨率而改变。有没有一种方法可以设置它,这样无论屏幕分辨率是多少,输出都是一样的? 我试

  • 问题内容: 我正在尝试获取包含SKScene的视图的屏幕抓图。我使用的技术是: 这对于普通的UIViews效果很好,但是无论出于何种原因,它都忽略了SKScene中的所有精灵。 我不确定这是否是错误,或者Sprite Kit的渲染是否与UIGraphics分开。 问题:当适用于UIViews的方式似乎不适用于Sprite Kit或有人成功将UIGraphics上下文与Sprite Kit结合使用时

  • 我在使用html2canvas。js库,用于与selenium一起拍摄全页屏幕截图。 我保存了html2canvas。我的java项目的类路径中的js文件。我用来获取屏幕截图的java脚本代码是: 我能够捕获flipkart页面的全页屏幕截图,但其中没有任何图像。 我无法使用Chrome的TakeScreenshot实用程序,因为它不允许使用Chrome浏览器拍摄整页屏幕截图。

  • 本文向大家介绍Python 实现局域网远程屏幕截图案例,包括了Python 实现局域网远程屏幕截图案例的使用技巧和注意事项,需要的朋友参考一下 最近各地中小学都在开展线上教学,有些不自觉的小朋友们用电脑在线学习的时候会趁家长不在的时候偷偷玩游戏、看漫画。 本程序screenshot.py就是用来监控学生机(windows系统)屏幕活动的一个小脚本。 首先在学生机上安装python3环境。另外需要安