zoukankan      html  css  js  c++  java
  • java截屏简单例子

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

    java截屏
     * 运行后将当前屏幕截取,并最大化显示。
     * 拖拽鼠标,选择自己需要的部分。
     * 按Esc键保存图片到桌面,并退出程序。
     * 点击右上角(没有可见的按钮),退出程序,不保存图片。
    import java.awt.AWTException;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.GraphicsDevice;
    import java.awt.GraphicsEnvironment;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.Toolkit;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.image.BufferedImage;
    import java.awt.image.RescaleOp;
    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.filechooser.FileSystemView;
     
    /**
     * java截屏
     * 运行后将当前屏幕截取,并最大化显示。
     * 拖拽鼠标,选择自己需要的部分。
     * 按Esc键保存图片到桌面,并退出程序。
     * 点击右上角(没有可见的按钮),退出程序,不保存图片。
     * 
     * @author JinCeon
     */
    public class SnapshotTest {
        public static void main(String[] args) {
            // 全屏运行
            RectD rd = new RectD();
            GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment()
                    .getDefaultScreenDevice();
            gd.setFullScreenWindow(rd);
        }
    }
     
    class RectD extends JFrame {
        private static final long serialVersionUID = 1L;
        int orgx, orgy, endx, endy;
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        BufferedImage image;
        BufferedImage tempImage;
        BufferedImage saveImage;
        Graphics g;
     
        @Override
        public void paint(Graphics g) {
            RescaleOp ro = new RescaleOp(0.8f, 0, null);
            tempImage = ro.filter(image, null);
            g.drawImage(tempImage, 0, 0, this);
        }
     
        public RectD() {
            snapshot();
            setVisible(true);
            // setSize(d);//最大化窗口
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    orgx = e.getX();
                    orgy = e.getY();
                }
            });
            this.addMouseMotionListener(new MouseMotionAdapter() {
                public void mouseDragged(MouseEvent e) {
                    endx = e.getX();
                    endy = e.getY();
                    g = getGraphics();
                    g.drawImage(tempImage, 0, 0, RectD.this);
                    int x = Math.min(orgx, endx);
                    int y = Math.min(orgy, endy);
                    int width = Math.abs(endx - orgx)+1;
                    int height = Math.abs(endy - orgy)+1;
                    // 加上1,防止width或height为0
                    g.setColor(Color.BLUE);
                    g.drawRect(x-1, y-1, width+1, height+1);
                    //减1,加1都是为了防止图片将矩形框覆盖掉
                    saveImage = image.getSubimage(x, y, width, height);
                    g.drawImage(saveImage, x, y, RectD.this);
                }
            });
            this.addKeyListener(new KeyAdapter() {
                @Override
                public void keyReleased(KeyEvent e) {
                    // 按Esc键退出
                    if (e.getKeyCode() == 27) {
                        saveToFile();
                        System.exit(0);
                    }
                }
            });
        }
     
        public void saveToFile() {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHmmss");
            String name = sdf.format(new Date());
            File path = FileSystemView.getFileSystemView().getHomeDirectory();
            String format = "jpg";
            File f = new File(path + File.separator + name + "." + format);
            try {
                ImageIO.write(saveImage, format, f);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
     
        public void snapshot() {
            try {
                Robot robot = new Robot();
                Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
                image = robot.createScreenCapture(new Rectangle(0, 0, d.width,
                        d.height));
            } catch (AWTException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    android测试点汇总
    Java Web应用调优线程池
    大型网站架构技术一览
    如何用消息系统避免分布式事务
    VMware Tools安装
    Git
    构架分布式队列编程
    排序算法概述
    ThreadLocal使用和原理
    JVM常用参数配置
  • 原文地址:https://www.cnblogs.com/shihaiming/p/7048402.html
Copyright © 2011-2022 走看看