Java实现截图并保存到本地

?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.credream.ocr;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
/*******************************************************************************
  * 该JavaBean可以直接在其他Java应用程序中调用,实现屏幕的"拍照" This JavaBean is
 
used to snapshot the
  * GUI in a Java application! You can embeded it in to your java application
  * source code, and us it to snapshot the right GUI of the application
  *
  * @see javax.ImageIO
  * @author liluqun ([email]liluqun@263.net[/email])
  * @version 1.0
  *
  ******************************************************************************/
 
public class GuiCamera {
 
     private String fileName;  // 文件的前缀
 
     private String defaultName =  "GuiCamera" ;
 
     static int serialNum =  0 ;
 
     private String imageFormat;  // 图像文件的格式
 
     private String defaultImageFormat =  "jpg" ;
 
     Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
 
    
 
/***************************************************************************
      * 默认的文件前缀为GuiCamera,文件格式为PNG格式 The default construct
 
will use the default
      * Image file surname "GuiCamera", and default image format "png"
      
 
**************************************************************************/
     public GuiCamera() {
         fileName = defaultName;
         imageFormat = defaultImageFormat;
 
     }
 
    
 
/***************************************************************************
      * @param s
      *            the surname of the snapshot file
      * @param format
      *            the format of the image file, it can be "jpg" or "png"
      *            本构造支持JPG和PNG文件的存储
      
 
**************************************************************************/
     public GuiCamera(String s, String format) {
 
         fileName = s;
         imageFormat = format;
     }
 
    
 
/***************************************************************************
      * 对屏幕进行拍照 snapShot the Gui once
      
 
**************************************************************************/
     public void snapShot() {
 
         try {
             // 拷贝屏幕到一个BufferedImage对象screenshot
             BufferedImage screenshot = ( new Robot())
                     .createScreenCapture( new Rectangle( 0 0 ,
                             ( int ) d.getWidth(), ( int )
 
d.getHeight()));
             serialNum++;
             // 根据文件前缀变量和文件格式变量,自动生成文件名
             String name = fileName + String.valueOf(serialNum) +  "."
                     + imageFormat;
             File f =  new File(name);
             System.out.print( "Save File " + name);
             // 将screenshot对象写入图像文件
             ImageIO.write(screenshot, imageFormat, f);
             System.out.print( "..Finished!\n" );
         catch (Exception ex) {
             System.out.println(ex);
         }
     }
 
     public static void main(String[] args) {
         GuiCamera cam =  new GuiCamera( "d:\\qq" "bmp" ); //
         cam.snapShot();
     }
}

第二种方法:

原文地址:Java实现截图并保存到本地

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.credream.ocr;
 
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();
         }
     }
}
第三种方法:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.credream.robotExp;
 
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class RobotExp {
public static void main(String[] args) {
try {
Robot robot =  new Robot();
BufferedImage bi=robot.createScreenCapture( new Rectangle( 900 , 800 ));  // 根据指定的
 
区域( 1300 , 800 )抓取屏幕的指定区域
ImageIO.write(bi,  "jpg" new File( "D:/imageTest.jpg" ));  //把抓取到的内容写入到一
 
个jpg文件中
catch (AWTException e) {
e.printStackTrace();
catch (IOException e) {
e.printStackTrace();
}
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值