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; 
 
/** 
 * 捕获屏幕,屏幕截图工具 
 */ 
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); 
	} 
 
	/** 
	 * 抓屏方法 
	 *  
	 * @return 返回一个图像 
	 */ 
	public BufferedImage captureScreen() { 
		BufferedImage scrImg = null; 
		try { 
			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();// 释放资源 
	} 
 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10160.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论