Sample screenshots in the Java implementation area
- 2020-04-01 03:14:05
- OfStack
This is a Java version of the screenshot program
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;
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.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.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;
public class ScreenShotTest {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
ScreenShotWindow ssw=new ScreenShotWindow();
ssw.setVisible(true);
} catch (AWTException e) {
e.printStackTrace();
}
}
});
}
}
class ScreenShotWindow extends JWindow
{
private int orgx, orgy, endx, endy;
private BufferedImage image=null;
private BufferedImage tempImage=null;
private BufferedImage saveImage=null;
private ToolsWindow tools=null;
public ScreenShotWindow() throws AWTException{
//Get screen size
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
this.setBounds(0, 0, d.width, d.height);
//Capture the screen
Robot robot = new Robot();
image = robot.createScreenCapture(new Rectangle(0, 0, d.width,d.height));
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
//When the mouse is released, record the coordinates of the end point and hide the operation window
orgx = e.getX();
orgy = e.getY();
if(tools!=null){
tools.setVisible(false);
}
}
@Override
public void mouseReleased(MouseEvent e) {
//When the mouse is released, the operation window is displayed
if(tools==null){
tools=new ToolsWindow(ScreenShotWindow.this,e.getX(),e.getY());
}else{
tools.setLocation(e.getX(),e.getY());
}
tools.setVisible(true);
tools.toFront();
}
});
this.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
//When the mouse is dragged, record the coordinates and redraw the window
endx = e.getX();
endy = e.getY();
//Temporary image used to buffer screen area to place screen flicker
Image tempImage2=createImage(ScreenShotWindow.this.getWidth(),ScreenShotWindow.this.getHeight());
Graphics g =tempImage2.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;
//Plus 1 prevents width or height0
g.setColor(Color.BLUE);
g.drawRect(x-1, y-1, width+1, height+1);
//Minus 1 plus 1 prevents the rectangle from overwriting
saveImage = image.getSubimage(x, y, width, height);
g.drawImage(saveImage, x, y, null);
ScreenShotWindow.this.getGraphics().drawImage(tempImage2,0,0,ScreenShotWindow.this);
}
});
}
@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);
}
//Save the image to a file
public void saveImage() throws IOException {
JFileChooser jfc=new JFileChooser();
jfc.setDialogTitle(" save ");
//File filter, user filter can be selected files
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG", "jpg");
jfc.setFileFilter(filter);
//Initialize a default file (which will be generated to the desktop)
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){
File file=jfc.getSelectedFile();
String path=file.getPath();
//Check for file suffixes and place suffixes that the user forgot to enter or incorrectly entered
if(!(path.endsWith(".jpg")||path.endsWith(".JPG"))){
path+=".jpg";
}
//Written to the file
ImageIO.write(saveImage,"jpg",new File(path));
System.exit(0);
}
}
}
class ToolsWindow extends JWindow
{
private ScreenShotWindow 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 screenshots ");
//Save button
JButton saveButton=new JButton(new ImageIcon("images/save.gif"));
saveButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
parent.saveImage();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
toolBar.add(saveButton);
//Close button
JButton closeButton=new JButton(new ImageIcon("images/close.gif"));
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
toolBar.add(closeButton);
this.add(toolBar,BorderLayout.NORTH);
}
}
< img SRC = "border = 0 / / files.jb51.net/file_images/article/201404/0140414064145.jpg? 201431464746 ">