用java语言实现屏幕截图


import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

/**
 * 捕获屏幕,相当于Windows的PrintScreen键。
 * 主窗口
 */
public class ScreenCaptureFrame extends JFrame implements ActionListener {

 // 捕获屏幕的工具类,是一个自定义类。
 private ScreenCaptureUtil scrCaptureUtil = null;
 // 画布,自定义类,用于画捕获到的屏幕图像
 private PaintCanvas canvas = null;

 // 构造函数
 public ScreenCaptureFrame() {
  super("Screen Capture");
  init();
 }
 // 初始化方法
 private void init() {
  // 新建抓屏工具
  scrCaptureUtil = new ScreenCaptureUtil();
  // 新建画布
  canvas = new PaintCanvas(scrCaptureUtil);
  Container c = this.getContentPane();
  c.setLayout(new BorderLayout());
  c.add(canvas, BorderLayout.CENTER);
  // 添加一个按钮,用于触发抓屏事件
  JButton capButton = new JButton("抓 屏");
  c.add(capButton, BorderLayout.SOUTH);
  capButton.addActionListener(this);
  this.setSize(400, 400);
  this.setVisible(true);
  this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 }

 // 点击“抓屏”按钮时,在画布上画屏幕图像
 public void actionPerformed(ActionEvent e) {
  canvas.drawScreen();
 }

 public static void main(String[] args) {
  new ScreenCaptureFrame();
 }
}

/**
 * 抓屏工具类
 */
class ScreenCaptureUtil {
 // 抓屏的主要工具类
 private Robot robot = null;
 // 屏幕的矩形图像
 private Rectangle scrRect = null;

 // 构造函数
 public ScreenCaptureUtil() {
  try {
   // 新建一个抓屏工具
   robot = new Robot();
  } catch (Exception ex) {
   System.out.println(ex.toString());
  }
  // 获取屏幕的矩形图像
  Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
  scrRect = new Rectangle(0, 0, scrSize.width, scrSize.height);
 }
 
 // 抓屏方法,返回一个图像
 public BufferedImage captureScreen() {
  BufferedImage scrImg = null;
  try {
   // robot的createScreenCapture方法实现抓屏
   // 参数指定了要抓屏的范围,由于scrRect是整个屏幕的矩形,所以,这里抓的是全屏图
   // 将抓取的屏幕图像返回
   scrImg = robot.createScreenCapture(scrRect);
  } catch (Exception e) {
   System.out.println(e.toString());
  }
  return scrImg;
 }
}
/**
 * 画布类,用于显示抓屏得到的图像
 */
class PaintCanvas extends JPanel {
 // 抓屏工具
 private ScreenCaptureUtil scrCaptureUtil = null;
 // 待画的图像 
 private BufferedImage scrImg = null;
 
 //构造方法,传入抓屏工具对象
 public PaintCanvas(ScreenCaptureUtil screenUtil) {
  this.scrCaptureUtil = screenUtil;
 }
 // 重载JPanel的paintComponent,用于画背景
 protected void paintComponent(Graphics g) {
  if (scrImg != null) {
   int iWidth = this.getWidth();
   int iHeight = this.getHeight();
   g.drawImage(scrImg, 0, 0, iWidth, iHeight, 0, 0, scrImg.getWidth(),
     scrImg.getHeight(), null);
  }
 }
 // 画屏幕图像的方法
 public void drawScreen() {
  Graphics g = this.getGraphics();
  // 抓屏,获取屏幕图像
  scrImg = scrCaptureUtil.captureScreen();
  if (scrImg != null) {
   // 画图
   this.paintComponent(g);
  }
  // 释放资源
  g.dispose();
 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值