zoukankan      html  css  js  c++  java
  • 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();
    }
    }
    }

  • 相关阅读:
    二级域名怎么设置阿里云
    Datatable 转换 Dictionary
    mysql查询某一个字段是否包含中文字符
    mysql update select 从查询结果中更新数据
    sql 查找重复数据,并且重复数据有子集
    mysql中key 、primary key 、unique key 与index区别
    mysql添加删除索引,查看某个表的建表语句
    优化你的服务器Apache、MySQL、PHP
    JQUERY多选框,单选框,检查选中的值
    jquery上传插件uploadify使用详解
  • 原文地址:https://www.cnblogs.com/superjt/p/2824426.html
Copyright © 2011-2022 走看看