📄 screencapture.java
字号:
package xmd.screencapture;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.io.*;
import com.sun.image.codec.jpeg.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
/********************************
class ImageCanvas 用于初始化屏幕快照
*********************************/
class ImageCanvas extends Canvas{
private Robot robot;
private Dimension dimension;
private Image fullimage;
private int x1,y1,x2,y2;
public ImageCanvas(){
try{
robot=new Robot();
}catch(AWTException e){}
DisplayMode mode=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode();
dimension=new Dimension(mode.getWidth(),mode.getHeight());
setSize(dimension.width,dimension.height);
fullimage=getfullImage();
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
x1=e.getX();
y1=e.getY();
if((e.getModifiers()&InputEvent.BUTTON3_MASK)==InputEvent.BUTTON3_MASK){
JOptionPane.showMessageDialog(null," 按确定退出.","退出",JOptionPane.PLAIN_MESSAGE);
System.exit(0);
}
}
public void mouseReleased(MouseEvent e){
if(x2-x1>5&&y2-y1>5)
showsubImage(getsubImage(x1+1,y1+1,x2-1,y2-1),x2-x1,y2-y1);
}
});
addMouseMotionListener(new MouseMotionListener(){
public void mouseMoved(MouseEvent e){}
public void mouseDragged(MouseEvent e){
x2=e.getX();
y2=e.getY();
repaint();
}
});
}
/**********************
getfullImage得到全屏快照
**********************/
private Image getfullImage(){
Image fullimage=robot.createScreenCapture(new Rectangle(0,0,dimension.width,dimension.height)).getScaledInstance(dimension.width,dimension.height,Image.SCALE_SMOOTH);
MediaTracker tracker=new MediaTracker(new Label());
tracker.addImage(fullimage,0);
try{
tracker.waitForID(0);
}catch(InterruptedException e){}
return fullimage;
}
/**********************
getsubImage得到选取的图象
***********************/
public Image getsubImage(int x1,int y1,int x2,int y2){
Image subimage=robot.createScreenCapture(new Rectangle(x1,y1,x2-x1,y2-y1)).getScaledInstance(x2-x1,y2-y1,Image.SCALE_SMOOTH);
MediaTracker tracker=new MediaTracker(new Label());
tracker.addImage(subimage,0);
try{
tracker.waitForID(0);
}catch(InterruptedException e){}
return subimage;
}
/************************************
showsubImage显示选取的图象,并提示是否保存
*************************************/
private void showsubImage(Image image,int w,int y){
int option=JOptionPane.showConfirmDialog(null,new subImageCanvas(image,w,y),"保存图象",JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE);
if(option==0){
SaveImageDialog file=new SaveImageDialog();
BufferedImage bufferedImage=new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = bufferedImage.createGraphics();
graphics2D.drawImage(image,0,0,image.getWidth(null),image.getHeight(null),Color.white,null);
try {
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(new FileOutputStream(file.filedialog.getSelectedFile()+".jpg"));
encoder.encode(bufferedImage);
encoder.getOutputStream().flush();
encoder.getOutputStream().close();
bufferedImage.flush();
}catch(IOException e){}
}
}
public Dimension getDimension(){
return dimension;
}
public void paint(Graphics g){
g.drawImage(fullimage,0,0,null);
g.setColor(Color.black);
g.drawRect(x1,y1,x2-x1,y2-y1);
}
public void update(Graphics g){
g.clipRect(0,0,dimension.width,dimension.height);
paint(g);
}
}
class subImageCanvas extends Canvas{
private Image image;
public subImageCanvas(Image image,int w,int h){
this.image=image;
setSize(w,h);
}
public void paint(Graphics g){
g.drawImage(image,0,0,null);
}
}
class Filefilter extends FileFilter
{
public boolean accept(File string)
{
String extension="";
if(string.getPath().lastIndexOf('.')>0)
extension=string.getPath().substring(string.getPath().lastIndexOf('.')+1).toLowerCase();
if(extension!="")
return extension.equals("jpg");
else
return string.isDirectory();
}
public String getDescription(){
return "JEPG Files (*.jpg)";
}
}
class SaveImageDialog extends JFrame{
public JFileChooser filedialog;
SaveImageDialog(){
filedialog=new JFileChooser();
filedialog.addChoosableFileFilter(new Filefilter());
filedialog.showSaveDialog(null);
}
}
class ImageWindow extends JWindow{
private ImageCanvas canvas=new ImageCanvas();
public ImageWindow(){
getContentPane().add(canvas);
GraphicsDevice device=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
setSize(canvas.getDimension().width,canvas.getDimension().height);
setVisible(true);
device.setFullScreenWindow(this);
}
}
public class ScreenCapture{
public static void main(String[] args){
int option=JOptionPane.showConfirmDialog(null," 现在生成屏幕快照?","生成屏幕快照",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
if(option==0){
new ImageWindow();
JOptionPane.showMessageDialog(null,"按左键选取要截取的范围,按右键退出.","提示",JOptionPane.PLAIN_MESSAGE);
}
else System.exit(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -