这是一个 Java 版的截图程序
复制代码代码如下:
пакет com.hongyuan.test;
импортировать java.awt.awtexception;
импортировать java.awt.borderlayout;
импортировать java.awt.color;
Импорт java.awt.dimension;
импортировать java.awt.eventqueue;
импортировать java.awt.flowlayout;
импортировать java.awt.graphics;
импортировать java.awt.image;
импортировать java.awt.rectangle;
импортировать java.awt.robot;
импортировать java.awt.toolkit;
импортировать java.awt.event.actionevent;
импортировать java.awt.event.actionlistener;
импортировать java.awt.event.mouseadapter;
Импорт java.awt.event.mouseeVent;
импортировать java.awt.event.mousemotionAdapter;
Импорт java.awt.image.bufferedImage;
импортировать java.awt.image.rescaleop;
Импорт java.io.file;
импортировать java.io.ioexception;
импортировать java.text.simpledateformat;
импортировать java.util.date;
Импорт javax.imageio.imageio;
Импорт javax.swing.imageicon;
Импорт javax.swing.jbutton;
Импорт javax.swing.jfilechooser;
Импорт javax.swing.jtoolbar;
Импорт javax.swing.jwindow;
Импорт javax.swing.filechooser.filenameeextensionfilter;
Импорт javax.swing.filechooser.filesystemview;
скриншотт -строй открытого класса {
public static void main (string [] args) {
EventQueue.invokelater (new Runnable () {
@Override
public void run () {
пытаться {
ScreenshotWindow SSW = новый экранинг -магазин ();
ssw.setvisible (true);
} catch (awtexception e) {
e.printstacktrace ();
}
}
});
}
}
/*
* 截图窗口
*/
Скриншот -снимки класса расширяет jwindow
{
Частный int orgx, оргия, Endx, Endy;
Private BufferedImage Image = null;
Частный BufferedImage Tempimage = NULL;
Private BufferedImage SaveImage = null;
Private Toolswindow Tools = NULL;
Public ScreenshotWindow () бросает awtexception {
// 获取屏幕尺寸
Dimension D = toolkit.getDefaulttoolkit (). GetScreensize ();
this.SetBounds (0, 0, D.Width, D.Height);
// 截取屏幕
Робот -робот = новый робот ();
image = robot.createScreencapture (новый прямоугольник (0, 0, D.width, D.Height));
это.
@Override
public void mousepressed (mouseevent e) {
// 鼠标松开时记录结束点坐标 , 并隐藏操作窗口
orgx = e.getx ();
orgy = e.gety ();
if (инструменты! = null) {
Tools.SetVisible (false);
}
}
@Override
public void museereleaded (museevent e) {
// 鼠标松开时 , 显示操作窗口
if (инструменты == null) {
Tools = new Toolswindow (ScreenShotWindow.This, e.getx (), e.gety ());
}еще{
Tools.SetLocation (e.getx (), e.gety ());
}
Tools.SetVisible (True);
Tools.tofront ();
}
});
this.addmousemotionlistener (new MousemotionAdapter () {
@Override
public void mousedragged (mouseevent e) {
// 鼠标拖动时 , 记录坐标并重绘窗口
endx = e.getx ();
endy = e.gety ();
// 临时图像 , 用于缓冲屏幕区域放置屏幕闪烁
Image Tempimage2 = CreateImage (ScreenShotWindow.This.getWidth (), ScreenShotWindow.This.getheight ());
Graphics g = Opemimage2.getGraphics ();
g.drawimage (Tempimage, 0, 0, Null);
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 防止 Ширина 或 Высота 0
g.setcolor (color.blue);
G.DrawRect (x-1, Y-1, ширина+1, высота+1);
// 减 1 加 1 都了防止图片矩形框覆盖掉
saveImage = image.getSubimage (x, y, ширина, высота);
G.Drawimage (SaveImage, x, y, Null);
ScreenshotWindow.This.getGraphics (). DrawMage (Opemimage2,0,0, ScreenShotWindow.This);
}
});
}
@Override
public void Paint (Graphics G) {
Rescaleop ro = new Rescaleop (0,8F, 0, NULL);
Tempimage = ro.filter (изображение, null);
g.drawimage (Tempimage, 0, 0, это);
}
// 保存图像到文件
public void saveImage () бросает ioException {
Jfilechooser jfc = new jfilechooser ();
jfc.setdialogtitle ("保存");
// 文件过滤器 , 用户过滤可选择文件
FILENAMEEEXTENCEFILTER FILTER = NEW FILENAMEEXEXTENSIONFILTER ("JPG", "JPG");
jfc.setfilefilter (фильтр);
// 初始化一个默认文件 (此文件会生成到桌面上)
SimpleDateFormat SDF = new SimpleDateFormat ("yyyyMmddhhmmss");
String fileName = sdf.format (new Date ());
File filePath = fileSystemView.getFilesyStemView (). Gethomedirectory ();
File defaultfile = new File (filePath + file.separator + filename + ".jpg");
jfc.setselectedFile (defaultFile);
int flag = jfc.showsavedialog (это);
if (flag == jfilechooser.approve_option) {
File file = jfc.getSelectedFile ();
String path = file.getPath ();
// 检查文件后缀 , 放置用户忘记输入后缀或者输入不正确的后缀
if (! (path.endswith (". jpg") || path.endswith (". jpg"))) {
PATH+= ". JPG";
}
// 写入文件
Imageio.write (saveImage, "jpg", новый файл (path));
System.Exit (0);
}
}
}
/*
* 操作窗口
*/
Class Toolswindow расширяет jwindow
{
Частный экранинг -ролик родитель;
Public Toolswindow (ScreenshotWindow Parent, Int X, Int Y) {
this.parent = родитель;
this.init ();
this.SetLocation (x, y);
this.pack ();
this.setvisible (true);
}
private void init () {
this.setlayout (new Borderlayout ());
Jtoolbar toolbar = new jtoolbar ("java 截图");
// 保存按钮
Jbutton savebutton = new Jbutton (new imageicon ("Image/save.gif"));
savebutton.addactionListener (new ActionListener () {
@Override
public void actionperformed (actionEvent e) {
пытаться {
parent.saveimage ();
} catch (ioException e1) {
e1.printstacktrace ();
}
}
});
Toolbar.Add (SaveButton);
// 关闭按钮
Jbutton closebutton = new jbutton (new imageicon ("images/row.gif"));
closebutton.addactionListener (new ActionListener () {
@Override
public void actionperformed (actionEvent e) {
System.Exit (0);
}
});
панель инструментов. Add (CloseButton);
this.Add (панель инструментов, borderlayout.north);
}
}