这是一个 Java 版的截图程序
复制代码代码如下:
Package com.hongyuan.test;
import java.awt.awtexception;
import java.awt.borderLayout;
import java.awt.color;
import java.awt.dimension;
import java.awt.eventqueue;
import java.awt.flowlayout;
import java.awt.graphics;
import java.awt.image;
import java.awt.rectangle;
Importer Java.awt.Robot;
import java.awt.toolkit;
import java.awt.event.actionEvent;
import java.awt.event.actionListener;
Importer java.awt.event.mousEadapter;
Importer java.awt.event.mousevent;
Importer java.awt.event.mousmotionAdapter;
Importer java.awt.image.bufferedImage;
import java.awt.image.rescaleop;
Importer java.io.file;
Importer java.io.ioException;
import java.text.simpledateFormat;
Importer java.util.date;
import javax.imageio.imageio;
import javax.swing.imageicon;
import javax.swing.jbutton;
import javax.swing.jfilechooser;
import javax.swing.jtoolbar;
import javax.swing.jwindow;
import javax.swing.filechooser.filenameExtensionFilter;
Importer javax.swing.filechooser.filesystemView;
classe publique ScrenshotTest {
public static void main (String [] args) {
EventQueue.invokelater (new Runnable () {
@Outrepasser
public void run () {
essayer {
ScreenShotWindow SSW = NOUVEAU ÉCRANSHOTWINDOW ();
ssw.setVisible (true);
} catch (awtexception e) {
e.printStackTrace ();
}
}
});
}
}
/ *
* 截图窗口
* /
Capture d'écran de classe étend Jwindow
{
private int orgx, orgy, endx, endy;
Image de tampon privé = null;
TempiMage de tampon privé = null;
BufferedImage privé SaveImage = NULL;
outils privéswindow = null;
Capture d'écran publiquewindow () lève Awtexception {
// 获取屏幕尺寸
Dimension d = toolkit.getDefaultToolkit (). GetScreensize ();
this.setbounds (0, 0, d.width, d.height);
// 截取屏幕
Robot robot = new robot ();
image = robot.createSCreencapture (nouveau rectangle (0, 0, d.width, d.height));
this.addmouseListener (new Mouseadapter () {
@Outrepasser
public void Mousdressressed (Mouseevent e) {
// 鼠标松开时记录结束点坐标 , 并隐藏操作窗口
orgx = e.getx ();
orgy = e.gety ();
if (tools! = null) {
outils.setVisible (false);
}
}
@Outrepasser
public void MouseLelent (Mouseevent e) {
// 鼠标松开时 , 显示操作窗口
if (tools == null) {
Tools = new ToolSwindow (ScreenShotWindow.Te, e.getX (), e.gety ());
}autre{
tools.setLocation (e.getx (), e.gety ());
}
outils.setVisible (true);
outils.tofront ();
}
});
this.addmousmotionListener (new MousmotionAdapter () {
@Outrepasser
public void MouseDragged (Mouseevent e) {
// 鼠标拖动时 , 记录坐标并重绘窗口
endx = e.getx ();
endy = e.gety ();
// 临时图像 , 用于缓冲屏幕区域放置屏幕闪烁
Image tempImage2 = CreateImage (ScreenShotWindow.This.getWidth (), ScreenShotWindow.This.geTheight ());
Graphiques g = tempimage2.getGraphics ();
G.DrawImage (TempImage, 0, 0, null);
int x = math.min (orgx, endx);
int y = math.min (orgie, endy);
int width = math.abs (endx - orgx) +1;
int height = math.abs (endy - orgy) +1;
// 加上 1 防止 Largeur 或 Hauteur0
g.setColor (Color.Blue);
G.Drawrect (x-1, y-1, largeur + 1, hauteur + 1);
// 减 1 加 1 都了防止图片矩形框覆盖掉
SaveImage = image.getSubImage (x, y, largeur, hauteur);
G.DrawImage (sauvegarde, x, y, null);
ScreenShotWindow.This.getGraphics (). DrawImage (TempImage2,0,0, ScreenshotWindow.Chis);
}
});
}
@Outrepasser
peinture publique vide (graphiques g) {
RESSALALOP RO = NOUVEAU RESCALALEOP (0,8F, 0, null);
tempimage = ro.filter (image, null);
G.DrawImage (TempImage, 0, 0, This);
}
// 保存图像到文件
public void SaveImage () lève IOException {
JFileChoOSer jfc = new JFileChoOser ();
jfc.setDialogTitle ("保存");
// 文件过滤器 , 用户过滤可选择文件
FileNameExtensionFilter filter = new FileNameExtensionFilter ("jpg", "jpg");
jfc.setFileFilter (filtre);
// 初始化一个默认文件 (此文件会生成到桌面上 此文件会生成到桌面上
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 (this);
if (flag == JFileChoOser.Approve_Option) {
Fichier file = jfc.getSelectedFile ();
String path = file.getPath ();
// 检查文件后缀 , 放置用户忘记输入后缀或者输入不正确的后缀
if (! (path.endswith (". jpg") || path.endswith (". jpg"))) {
path + = ". jpg";
}
// 写入文件
ImageIo.Write (SaveImage, "JPG", nouveau fichier (chemin));
System.exit (0);
}
}
}
/ *
* 操作窗口
* /
outils de classewindow étend Jwindow
{
Capture d'écran privée Parent;
Public ToolsWindow (ScreenShotWindow Parent, int x, int y) {
this.parent = 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 = NOUVEAU JBUTTON (NOUVEAU IMAGEICON ("Images / Save.gif"));
SAVEBUTTON.ADDACTIONSLISTEN (New ActionListener () {
@Outrepasser
public void ActionPerformed (ActionEvent e) {
essayer {
parent.saveImage ();
} catch (ioexception e1) {
e1.printStackTrace ();
}
}
});
Toolbar.Add (SaveButton);
// 关闭按钮
Jbutton closebutton = new Jbutton (new ImageIcon ("images / close.gif"));
closebutton.addactionListener (new ActionListener () {
@Outrepasser
public void ActionPerformed (ActionEvent e) {
System.exit (0);
}
});
Toolbar.Add (CloseButton);
this.add (barre d'outils, borderlayout.north);
}
}