A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fantianfei 中级黑马   /  2015-7-3 10:05  /  699 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java截屏
* 运行后将当前屏幕截取,并最大化显示。
* 拖拽鼠标,选择自己需要的部分。
* 按Esc键保存图片到桌面,并退出程序。
* 点击右上角(没有可见的按钮),退出程序,不保存图片。
  1. import java.awt.AWTException;
  2. import java.awt.Color;
  3. import java.awt.Dimension;
  4. import java.awt.Graphics;
  5. import java.awt.GraphicsDevice;
  6. import java.awt.GraphicsEnvironment;
  7. import java.awt.Rectangle;
  8. import java.awt.Robot;
  9. import java.awt.Toolkit;
  10. import java.awt.event.KeyAdapter;
  11. import java.awt.event.KeyEvent;
  12. import java.awt.event.MouseAdapter;
  13. import java.awt.event.MouseEvent;
  14. import java.awt.event.MouseMotionAdapter;
  15. import java.awt.image.BufferedImage;
  16. import java.awt.image.RescaleOp;
  17. import java.io.File;
  18. import java.io.IOException;
  19. import java.text.SimpleDateFormat;
  20. import java.util.Date;

  21. import javax.imageio.ImageIO;
  22. import javax.swing.JFrame;
  23. import javax.swing.filechooser.FileSystemView;

  24. /**
  25. * java截屏
  26. * 运行后将当前屏幕截取,并最大化显示。
  27. * 拖拽鼠标,选择自己需要的部分。
  28. * 按Esc键保存图片到桌面,并退出程序。
  29. * 点击右上角(没有可见的按钮),退出程序,不保存图片。
  30. *
  31. * @author JinCeon
  32. */
  33. public class SnapshotTest {
  34.     public static void main(String[] args) {
  35.         // 全屏运行
  36.         RectD rd = new RectD();
  37.         GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment()
  38.                 .getDefaultScreenDevice();
  39.         gd.setFullScreenWindow(rd);
  40.     }
  41. }

  42. class RectD extends JFrame {
  43.     private static final long serialVersionUID = 1L;
  44.     int orgx, orgy, endx, endy;
  45.     Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  46.     BufferedImage image;
  47.     BufferedImage tempImage;
  48.     BufferedImage saveImage;
  49.     Graphics g;

  50.     @Override
  51.     public void paint(Graphics g) {
  52.         RescaleOp ro = new RescaleOp(0.8f, 0, null);
  53.         tempImage = ro.filter(image, null);
  54.         g.drawImage(tempImage, 0, 0, this);
  55.     }

  56.     public RectD() {
  57.         snapshot();
  58.         setVisible(true);
  59.         // setSize(d);//最大化窗口
  60.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  61.         this.addMouseListener(new MouseAdapter() {
  62.             public void mousePressed(MouseEvent e) {
  63.                 orgx = e.getX();
  64.                 orgy = e.getY();
  65.             }
  66.         });
  67.         this.addMouseMotionListener(new MouseMotionAdapter() {
  68.             public void mouseDragged(MouseEvent e) {
  69.                 endx = e.getX();
  70.                 endy = e.getY();
  71.                 g = getGraphics();
  72.                 g.drawImage(tempImage, 0, 0, RectD.this);
  73.                 int x = Math.min(orgx, endx);
  74.                 int y = Math.min(orgy, endy);
  75.                 int width = Math.abs(endx - orgx)+1;
  76.                 int height = Math.abs(endy - orgy)+1;
  77.                 // 加上1,防止width或height为0
  78.                 g.setColor(Color.BLUE);
  79.                 g.drawRect(x-1, y-1, width+1, height+1);
  80.                 //减1,加1都是为了防止图片将矩形框覆盖掉
  81.                 saveImage = image.getSubimage(x, y, width, height);
  82.                 g.drawImage(saveImage, x, y, RectD.this);
  83.             }
  84.         });
  85.         this.addKeyListener(new KeyAdapter() {
  86.             @Override
  87.             public void keyReleased(KeyEvent e) {
  88.                 // 按Esc键退出
  89.                 if (e.getKeyCode() == 27) {
  90.                     saveToFile();
  91.                     System.exit(0);
  92.                 }
  93.             }
  94.         });
  95.     }

  96.     public void saveToFile() {
  97.         SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHmmss");
  98.         String name = sdf.format(new Date());
  99.         File path = FileSystemView.getFileSystemView().getHomeDirectory();
  100.         String format = "jpg";
  101.         File f = new File(path + File.separator + name + "." + format);
  102.         try {
  103.             ImageIO.write(saveImage, format, f);
  104.         } catch (IOException e) {
  105.             e.printStackTrace();
  106.         }
  107.     }

  108.     public void snapshot() {
  109.         try {
  110.             Robot robot = new Robot();
  111.             Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  112.             image = robot.createScreenCapture(new Rectangle(0, 0, d.width,
  113.                     d.height));
  114.         } catch (AWTException e) {
  115.             e.printStackTrace();
  116.         }
  117.     }
  118. }
复制代码

1 个回复

倒序浏览
没看懂啊,还需努力
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马