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();
}
}
}
|