Java屏幕截图工具 捕获屏幕

原文:http://www.open-open.com/code/view/1420037709781

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();// 释放资源
    }

}
时间: 2024-10-09 09:23:43

Java屏幕截图工具 捕获屏幕的相关文章

用JAVA捕获屏幕、屏幕录像、播放

http://blog.csdn.net/njchenyi/article/details/447554 用JAVA捕获屏幕.屏幕录像.播放 标签: javaexceptionimageimportnullstring 2005-08-07 10:07 4739人阅读 评论(2) 收藏 举报  分类: JAVA(158)  版权声明:本文为博主原创文章,未经博主允许不得转载. //记录屏幕.类似录像 package com.wnetw.project.media; import java.awt

java学习之常用Java Profiling工具的分析与比较

在 Java 程序的开发过程中,不可避免地会遇到内存使用.性能瓶颈等问题.Java Profiler 工具能帮助开发人员快速.有效地定位这些问题,因此成为了 Java 开发过程中的一个重要工具.目前市场上的 Java Profiler 工具种类繁多,本文将对目前比较常见的几种工具进行简要介绍,并从功能.性能等角度作比较,从而帮助 Java 程序员选择合适的 Java Profiler 工具. 本文主要分为三个部分:第一部分简要介绍 Java Profiler 工具的原理:第二部分对目前常见的 J

Java邮件发送与屏幕截屏

前几天七夕情人节孤独寂寞的程序猿闲来没事,花了一两个小时写了个小Demo主要实现Java的Mail发送功能和桌面截屏功能. 首先让我们先看看Java sendMail邮件发送和桌面屏幕截屏功能是怎么实现的基础知识. 一.Java  SendMail邮件发送 首先让我们来看看邮件发送的原理图: JavaMail 是一套sun 提供开发邮件收发程序API,JavaMail编写程序就是邮件客户端程序(和outlook.foxmail功能类似) * JavaMail开发需要类库 javamail API

java编程工具

下面几个工具都可以用于多中开发语言.从功能复杂到简单,电脑配置需要从高低.分别为Eclipse , UltraEdit , Editplus. 1.Eclipse Eclipse是一种可扩展的开放源代码IDE.2001年11月,IBM公司捐出价值4,000万美元的源代码组建了Eclipse联盟,并由该联盟负责这种工具的后续开发.集成开发环境(IDE)经常将其应用范围限定在“开发.构建和调试”的周期之中.为了帮助集成开发环境(IDE)克服目前的局限性,业界厂商合作创建了Eclipse平台.Ecli

8个超实用的Java测试工具和框架

Java入门 如果你才刚开始接触Java世界,那么要做的第一件事情是,安装JDK--Java Development Kit(Java开发工具包),它自带有Java Runtime Environment(JRE)和JVM(Java运行时环境).它能让你在自己的电脑上编译.运行.测试你的Java程序. 此外,你还需要IDE(集成开发环境).选择有很多,如IntelliJ.Eclipse和NetBeans. Java测试工具 下面是我精选的8个最棒的Java测试工具和框架. 1.Arquillia

Arthas Alibaba 开源 Java 诊断工具

Arthas 用户文档 English Docs Arthas(阿尔萨斯) 能为你做什么? Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug

Java 正则表达式之捕获组

Java 正则表达式之捕获组 1. Java 正则表达式基础 2. Java 正则表达式之捕获组 一.概述 1.1 什么是捕获组 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用.当然,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部. 捕获组有两种形式,一种是普通捕获组,另一种是命名捕获组,通常所说的捕获组指的是普通捕获组.语法如下: 普通捕获组:(Expression) 命名捕获组:(?<name>Expression) 普通捕获组

阿里内部史上最牛逼的带闪电的java诊断工具开源码

在阿里巴巴内部,有很多自研工具供开发者使用,其中有一款工具,是几乎每个Java开发都使用过的工具,那就是Arthas,这是一款Java诊断工具,是一款牛逼带闪电的工具.该工具已于2018年9月份开源. 在日常开发中,你是否遇到过以下问题: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法

java 常用工具

System:类中的属性方法都是静态的.无法实例化 err:"标准"错误输出流 in:"标准"输入流 out:"标准"输出流 常见方法: long currentTimeMillis();获取当前时间的毫秒值 Properties    getProperties(); 获取系统属性 Properties集合中存储的都是String类型的键和值. Runtime:没有构造方法摘要,说明该类不可以创建对象. 方法又是非静态,说明该类提供静态返回该类