⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 screencapture.java

📁 用java实现的抓屏功能。
💻 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 + -