这是一个 java 版的截图程序
复制代码代码如下:
paquete com.hongyuan.test;
import java.awt.awtexception;
import java.awt.borderlayut;
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;
import java.awt.robot;
import java.awt.toolkit;
import java.awt.event.actionEvent;
import java.awt.event.actionListener;
import java.awt.event.mouseadapter;
import java.awt.event.mousevent;
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.imageicon;
import javax.swing.jbutton;
import javax.swing.jfilechooser;
import javax.swing.jtoolbar;
import javax.swing.jwindow;
import javax.swing.filechooser.filenameExtensionFilter;
import javax.swing.filechooser.filesystemView;
Class de clase pública
public static void main (string [] args) {
EventQueue.invokelater (new Runnable () {
@Anular
public void run () {
intentar {
ScreenShotwindow ssw = new captshotwindow ();
ssw.setVisible (verdadero);
} catch (awtexception e) {
E.PrintStackTrace ();
}
}
});
}
}
/*
* 截图窗口
*/
Clase Captura de pantalla de pantalla
{
privado int orgx, orgía, endx, endy;
Imagen privado de BufferedImage = nulo;
privado bufferedimage tempimage = null;
privado bufferedimage saveImage = null;
Toolswindow de herramientas privadas = nulo;
Public captshotwindow () lanza awtexception {
// 获取屏幕尺寸
Dimensión d = Toolkit.getDefaultToolkit (). GetsCreensize ();
this.setBounds (0, 0, D.Width, D.Height);
// 截取屏幕
Robot robot = new Robot ();
Image = Robot.CreateScreencapture (nuevo rectángulo (0, 0, D.Width, D.Height));
this.AddMousElistener (New Mouseadapter () {
@Anular
public void mousepressed (mouseevent e) {
// 鼠标松开时记录结束点坐标 并隐藏操作窗口 并隐藏操作窗口
orgx = e.getx ();
orgía = e.gety ();
if (herramientas! = nulo) {
Tools.SetVisible (falso);
}
}
@Anular
Public Void Mousereleaded (Mouseevent E) {
// 鼠标松开时 显示操作窗口 显示操作窗口
if (herramientas == nulo) {
Herramientas = new Toolswindow (shatenshotwindow.this, e.getx (), e.gety ());
}demás{
Tools.SetLocation (E.Getx (), E.Gety ());
}
Tools.SetVisible (verdadero);
Tools.tofront ();
}
});
this.addmousemotionListener (New MousemotionAdapter () {
@Anular
public void mousedragged (mouseevent e) {
// 鼠标拖动时 记录坐标并重绘窗口 记录坐标并重绘窗口
endx = e.getx ();
endy = e.gety ();
// 临时图像 用于缓冲屏幕区域放置屏幕闪烁 用于缓冲屏幕区域放置屏幕闪烁
Image tempImage2 = createImage (captshotwindow.this.getWidth (), shatenshotwindow.this.getheight ());
Gráficos g = tempimage2.getGraphics ();
G.DrawImage (tempimage, 0, 0, nulo);
int x = math.min (orgx, endx);
int y = math.min (orgía, endy);
int width = math.abs (endx - orgx) +1;
int altura = math.abs (endy - orgía) +1;
// 加上 1 防止 Ancho 或 Altura0
G.SetColor (color.blue);
g.drawrect (x-1, y-1, ancho+1, altura+1);
// 减 1 加 1 都了防止图片矩形框覆盖掉
saveImage = image.getSubimage (x, y, ancho, altura);
G.DrawImage (saveImage, x, y, null);
Screenshotwindow.this.getgraphics (). DrawImage (tempimage2,0,0, captshotwindow.this);
}
});
}
@Anular
Pinte de pintura pública (gráficos g) {
Rescaleop ro = new rescaleop (0.8f, 0, nulo);
tempimage = ro.filter (imagen, nulo);
G.DrawImage (tempimage, 0, 0, esto);
}
// 保存图像到文件
public void saveImage () lanza ioexception {
Jfilechooser jfc = new JFilechooser ();
jfc.SetDialogTitle ("保存");
// 文件过滤器 用户过滤可选择文件 用户过滤可选择文件
FileExExtensionFilter Filter = new FileNAMEExTensionFilter ("jpg", "jpg");
jfc.setFileFilter (filtro);
// 初始化一个默认文件(此文件会生成到桌面上)
SimpleDateFormat sdf = new SimpleDateFormat ("yyyymmddhhmmss");
Cadena filename = sdf.format (nueva fecha ());
Archivo filePath = filesystemView.getFileSystemView (). Gethomedirectory ();
Archivo defaultFile = nuevo archivo (filepath + file.separator + nombre de archivo + ".jpg");
jfc.setselectedFile (defaultFile);
int flag = jfc.showsavedialog (this);
if (flag == jfilechooser.approve_option) {
Archivo archivo = jfc.getSelectedFile ();
String path = file.getPath ();
// 检查文件后缀 放置用户忘记输入后缀或者输入不正确的后缀 放置用户忘记输入后缀或者输入不正确的后缀
if (! (rath.endswith (". jpg") || path.endswith (". jpg"))) {
ruta+= ". jpg";
}
// 写入文件
ImageIO.Write (saveImage, "jpg", nuevo archivo (ruta));
System.exit (0);
}
}
}
/*
* 操作窗口
*/
clase Toolswindow se extiende JWindow
{
Padre privado de captura de pantalla de captura de pantalla;
Public Toolswindow (ScreenShotWindow Parent, Int X, Int y) {
this.parent = parent;
this.init ();
this.setLocation (x, y);
this.pack ();
this.setVisible (verdadero);
}
Private void init () {
this.setLayout (new BorderLayout ());
JToolBar Tool Bar = new JToolBar ("Java 截图");
// 保存按钮
JButton SaveButton = new JButton (new Imageicon ("Images/Save.gif"));
saveButton.addactionListener (new ActionListener () {
@Anular
public void Actionperformed (ActionEvent E) {
intentar {
parent.saveImage ();
} catch (ioException e1) {
e1.printstackTrace ();
}
}
});
Barra de herramientas.Add (SaveButton);
// 关闭按钮
JButton CloseButton = new JButton (new Imageicon ("Images/Close.gif"));
CloseButton.addactionListener (new ActionListener () {
@Anular
public void Actionperformed (ActionEvent E) {
System.exit (0);
}
});
Barra de herramientas.add (CloseButton);
this.add (Barra de herramientas, BorderLayout.north);
}
}