• java 截图源码


    package com.cunzhang;

    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键保存图片到桌面,并退出程序。 点击右上角(没有可见的按钮),退出程序,不保存图片。
    *
    * <pre>
    * 不能立即给你提供源码 但是可以教给你怎么实现。
    * 首先 你要截屏 肯定要在属于用鼠标圈定一个区域来截取这个区域。
    *
    * 你可以这样:
    * 先截取当前屏幕的满屏图片:new robot().createScreenCapture(r) 这个是截屏代码 r是Rectangle类型 代表要截取的区域。
    *
    * 然后用 JDialog 做一个无控制条的窗口,大小设置成满屏,把截取的这个满屏的图片贴到这个 JDiaglog 里
    *
    * 然后做一下鼠标圈定区域,这个很简单 不详细说了, 最后对你圈定的这个区域再做一次截屏,这个不就是你要的截图了。,。 最后别忘了 截屏完毕后 关闭JDialog
    *
    * 你要是觉得这样做麻烦,也没别的办法。 反正我很明白 QQ的截屏也是这样做的
    * </pre>
    *
    * @author JinCeon
    */
    public class ScreenCapture
    {
    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(JFrame.EXIT_ON_CLOSE);
    this.addMouseListener(new MouseAdapter()
    {
    @Override
    public void mousePressed(MouseEvent e)
    {
    orgx = e.getX();
    orgy = e.getY();
    }
    });
    this.addMouseMotionListener(new MouseMotionAdapter()
    {
    @Override
    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();
    }
    }
    }

  • 相关阅读:
    nginx 正向代理 反向代理 负载均衡
    nginx配置文件常用基本配置指令
    92)http 和https协议入门
    tp6--nginx下pathinfo配置
    tp6省略url里的index.php
    echarts鼠标移上去显示数据
    composer 下载thinkphp6失败
    tp5写入cookie失效
    4.15 Spring Cloud理论基础
    4.14 SpringBoot理论基础
  • 原文地址:https://www.cnblogs.com/superjt/p/2824426.html
Copyright © 2020-2023  润新知