java截屏简单例子详解编程语言

java截屏
 * 运行后将当前屏幕截取,并最大化显示。
 * 拖拽鼠标,选择自己需要的部分。
 * 按Esc键保存图片到桌面,并退出程序。
 * 点击右上角(没有可见的按钮),退出程序,不保存图片。
import java.awt.AWTException; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import java.awt.Rectangle; 
import java.awt.Robot; 
import java.awt.Toolkit; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
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.JFrame; 
import javax.swing.filechooser.FileSystemView; 
  
/** 
 * java截屏 
 * 运行后将当前屏幕截取,并最大化显示。 
 * 拖拽鼠标,选择自己需要的部分。 
 * 按Esc键保存图片到桌面,并退出程序。 
 * 点击右上角(没有可见的按钮),退出程序,不保存图片。 
 *  
 * @author JinCeon 
 */ 
public class SnapshotTest { 
    public static void main(String[] args) { 
        // 全屏运行 
        RectD rd = new RectD(); 
        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment() 
                .getDefaultScreenDevice(); 
        gd.setFullScreenWindow(rd); 
    } 
} 
  
class RectD extends JFrame { 
    private static final long serialVersionUID = 1L; 
    int orgx, orgy, endx, endy; 
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 
    BufferedImage image; 
    BufferedImage tempImage; 
    BufferedImage saveImage; 
    Graphics g; 
  
    @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); 
    } 
  
    public RectD() { 
        snapshot(); 
        setVisible(true); 
        // setSize(d);//最大化窗口 
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
        this.addMouseListener(new MouseAdapter() { 
            public void mousePressed(MouseEvent e) { 
                orgx = e.getX(); 
                orgy = e.getY(); 
            } 
        }); 
        this.addMouseMotionListener(new MouseMotionAdapter() { 
            public void mouseDragged(MouseEvent e) { 
                endx = e.getX(); 
                endy = e.getY(); 
                g = getGraphics(); 
                g.drawImage(tempImage, 0, 0, RectD.this); 
                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; 
                // 加上1,防止width或height为0 
                g.setColor(Color.BLUE); 
                g.drawRect(x-1, y-1, width+1, height+1); 
                //减1,加1都是为了防止图片将矩形框覆盖掉 
                saveImage = image.getSubimage(x, y, width, height); 
                g.drawImage(saveImage, x, y, RectD.this); 
            } 
        }); 
        this.addKeyListener(new KeyAdapter() { 
            @Override 
            public void keyReleased(KeyEvent e) { 
                // 按Esc键退出 
                if (e.getKeyCode() == 27) { 
                    saveToFile(); 
                    System.exit(0); 
                } 
            } 
        }); 
    } 
  
    public void saveToFile() { 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHmmss"); 
        String name = sdf.format(new Date()); 
        File path = FileSystemView.getFileSystemView().getHomeDirectory(); 
        String format = "jpg"; 
        File f = new File(path + File.separator + name + "." + format); 
        try { 
            ImageIO.write(saveImage, format, f); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
  
    public void snapshot() { 
        try { 
            Robot robot = new Robot(); 
            Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 
            image = robot.createScreenCapture(new Rectangle(0, 0, d.width, 
                    d.height)); 
        } catch (AWTException e) { 
            e.printStackTrace(); 
        } 
    } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10532.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论