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][email protected][/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(); } } } |