主要使用的是java.util.Robot类来捕获屏幕,可以实现对屏幕一个矩形区域的捕获,通过这个类,我们也可以实现一个远程桌面控制的程序。- package com.qiu.util;
- import java.io.*;
- import java.net.*;
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- import java.awt.image.*;
- import javax.imageio.*;
- import java.io.*;
- /*
- 一个简单的屏幕抓图
- */
- public class ScreenCapture {
- //test main
- public static void main(String[] args) throws Exception{
- String userdir = System.getProperty("user.dir");
- File tempFile = new File("d:","temp.png");
- ScreenCapture capture = ScreenCapture.getInstance();
- capture.captureImage();
- JFrame frame = new JFrame();
- JPanel panel = new JPanel();
- panel.setLayout(new BorderLayout());
- JLabel imagebox = new JLabel();
- panel.add(BorderLayout.CENTER,imagebox);
- imagebox.setIcon(capture.getPickedIcon());
- capture.saveToFile(tempFile);
- capture.captureImage();
- imagebox.setIcon(capture.getPickedIcon());
- frame.setContentPane(panel);
- frame.setSize(400,300);
- frame.show();
- System.out.println("Over");
- }
- private ScreenCapture() {
- try{
- robot = new Robot();
- }
- catch(AWTException e) {
- System.err.println("Internal Error: " + e);
- e.printStackTrace();
- }
- JPanel cp = (JPanel)dialog.getContentPane();
- cp.setLayout(new BorderLayout());
- labFullScreenImage.addMouseListener(new MouseAdapter() {
- public void mouseReleased(MouseEvent evn) {
- isFirstPoint = true;
- pickedImage = fullScreenImage.getSubimage(recX,recY,recW,recH);
- dialog.setVisible(false);
- }
- });
- labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() {
- public void mouseDragged(MouseEvent evn) {
- if(isFirstPoint) {
- x1 = evn.getX();
- y1 = evn.getY();
- isFirstPoint = false;
- }
- else {
- x2 = evn.getX();
- y2 = evn.getY();
- int maxX = Math.max(x1,x2);
- int maxY = Math.max(y1,y2);
- int minX = Math.min(x1,x2);
- int minY = Math.min(y1,y2);
- recX = minX;
- recY = minY;
- recW = maxX-minX;
- recH = maxY-minY;
- labFullScreenImage.drawRectangle(recX,recY,recW,recH);
- }
- }
- public void mouseMoved(MouseEvent e) {
- labFullScreenImage.drawCross(e.getX(),e.getY());
- }
- });
- cp.add(BorderLayout.CENTER,labFullScreenImage);
- dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
- dialog.setAlwaysOnTop(true);
- dialog.setMaximumSize(
- Toolkit.getDefaultToolkit().getScreenSize());
- dialog.setUndecorated(true);
- dialog.setSize(dialog.getMaximumSize());
- dialog.setModal(true);
- }
- //Singleton Pattern
- public static ScreenCapture getInstance() {
- return defaultCapturer;
- }
- /*
- 捕捉全屏慕
- */
- public Icon captureFullScreen() {
- fullScreenImage = robot.createScreenCapture(new Rectangle(
- Toolkit.getDefaultToolkit().getScreenSize()));
- ImageIcon icon = new ImageIcon(fullScreenImage);
- return icon;
- }
- /*
- 捕捉屏幕的一个矫形区域
- */
- public void captureImage() {
- fullScreenImage = robot.createScreenCapture(new Rectangle(
- Toolkit.getDefaultToolkit().getScreenSize()));
- ImageIcon icon = new ImageIcon(fullScreenImage);
- labFullScreenImage.setIcon(icon);
- dialog.setVisible(true);
- }
- /*
- 得到捕捉后的BufferedImage
- */
- public BufferedImage getPickedImage() {
- return pickedImage;
- }
- /*
- 得到捕捉后的Icon
- */
- public ImageIcon getPickedIcon() {
- return new ImageIcon(getPickedImage());
- }
- /*
- 储存为一个文件,为PNG格式
- @deprecated
- replaced by saveAsPNG(File file)
- */
- @Deprecated
- public void saveToFile(File file) throws IOException{
- ImageIO.write(getPickedImage(),defaultImageFormater,file);
- }
- /*
- 储存为一个文件,为PNG格式
- */
- public void saveAsPNG(File file) throws IOException {
- ImageIO.write(getPickedImage(),"png",file);
- }
- /*
- 储存为一个JPEG格式图像文件
- */
- public void saveAsJPEG(File file) throws IOException {
- ImageIO.write(getPickedImage(),"JPEG",file);
复制代码 |
|