以下代码不是本人所写,乃是从网上搜到,记录下来供以后参考。

  1 package remotescreen;
  2 
  3 import java.awt.AWTException;
  4 import java.awt.BorderLayout;
  5 import java.awt.Cursor;
  6 import java.awt.Graphics;
  7 import java.awt.Rectangle;
  8 import java.awt.Robot;
  9 import java.awt.Toolkit;
 10 import java.awt.event.MouseAdapter;
 11 import java.awt.event.MouseEvent;
 12 import java.awt.event.MouseMotionAdapter;
 13 import java.awt.image.BufferedImage;
 14 import java.io.File;
 15 import java.io.IOException;
 16 import java.io.OutputStream;
 17 
 18 import javax.imageio.ImageIO;
 19 import javax.swing.Icon;
 20 import javax.swing.ImageIcon;
 21 import javax.swing.JDialog;
 22 import javax.swing.JFrame;
 23 import javax.swing.JLabel;
 24 import javax.swing.JPanel;
 25 
 26 /**
 27  * @Author Qiu_BaiChao 一个简单的屏幕抓图
 28  * 
 29  **/
 30 
 31 public class ScreenCapture {
 32     // test main
 33     public static void main(String[] args) throws Exception {
 34         String userdir = System.getProperty("user.dir");
 35         File tempFile = new File("d:""temp.png");
 36         ScreenCapture capture = ScreenCapture.getInstance();
 37         capture.captureImage();
 38         JFrame frame = new JFrame();
 39         JPanel panel = new JPanel();
 40         panel.setLayout(new BorderLayout());
 41         JLabel imagebox = new JLabel();
 42         panel.add(BorderLayout.CENTER, imagebox);
 43         imagebox.setIcon(capture.getPickedIcon());
 44         capture.saveAsPNG(tempFile);
 45         capture.captureImage();
 46         imagebox.setIcon(capture.getPickedIcon());
 47         frame.setContentPane(panel);
 48         frame.setSize(400300);
 49         frame.show();
 50         System.out.println("Over");
 51     }
 52 
 53     private ScreenCapture() {
 54 
 55         try {
 56             robot = new Robot();
 57         } catch (AWTException e) {
 58             System.err.println("Internal Error: " + e);
 59             e.printStackTrace();
 60         }
 61         JPanel cp = (JPanel) dialog.getContentPane();
 62         cp.setLayout(new BorderLayout());
 63         labFullScreenImage.addMouseListener(new MouseAdapter() {
 64             public void mouseReleased(MouseEvent evn) {
 65                 isFirstPoint = true;
 66                 pickedImage = fullScreenImage
 67                         .getSubimage(recX, recY, recW, recH);
 68                 dialog.setVisible(false);
 69             }
 70         });
 71 
 72         labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() {
 73             public void mouseDragged(MouseEvent evn) {
 74                 if (isFirstPoint) {
 75                     x1 = evn.getX();
 76                     y1 = evn.getY();
 77                     isFirstPoint = false;
 78                 } else {
 79                     x2 = evn.getX();
 80                     y2 = evn.getY();
 81                     int maxX = Math.max(x1, x2);
 82                     int maxY = Math.max(y1, y2);
 83                     int minX = Math.min(x1, x2);
 84                     int minY = Math.min(y1, y2);
 85                     recX = minX;
 86                     recY = minY;
 87                     recW = maxX - minX;
 88                     recH = maxY - minY;
 89                     labFullScreenImage.drawRectangle(recX, recY, recW, recH);
 90                 }
 91             }
 92 
 93             public void mouseMoved(MouseEvent e) {
 94                 labFullScreenImage.drawCross(e.getX(), e.getY());
 95             }
 96         });
 97 
 98         cp.add(BorderLayout.CENTER, labFullScreenImage);
 99         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
100         dialog.setAlwaysOnTop(true);
101         dialog.setMaximumSize(Toolkit.getDefaultToolkit().getScreenSize());
102         dialog.setUndecorated(true);
103         dialog.setSize(dialog.getMaximumSize());
104         dialog.setModal(true);
105     }
106 
107     // Singleton Pattern
108     public static ScreenCapture getInstance() {
109         return defaultCapturer;
110     }
111 
112     /** 捕捉全屏慕 */
113     public Icon captureFullScreen() {
114         fullScreenImage = robot.createScreenCapture(new Rectangle(Toolkit
115                 .getDefaultToolkit().getScreenSize()));
116         ImageIcon icon = new ImageIcon(fullScreenImage);
117         return icon;
118     }
119 
120     /**
121      * 捕捉屏幕的一个矫形区域
122      */
123     public void captureImage() {
124         fullScreenImage = robot.createScreenCapture(new Rectangle(Toolkit
125                 .getDefaultToolkit().getScreenSize()));
126         ImageIcon icon = new ImageIcon(fullScreenImage);
127         labFullScreenImage.setIcon(icon);
128         dialog.setVisible(true);
129     }
130 
131     /** 得到捕捉后的BufferedImage */
132     public BufferedImage getPickedImage() {
133         return pickedImage;
134     }
135 
136     /** 得到捕捉后的Icon */
137     public ImageIcon getPickedIcon() {
138         return new ImageIcon(getPickedImage());
139     }
140 
141     /**
142      * 储存为一个文件,为PNG格式
143      * 
144      * @deprecated replaced by saveAsPNG(File file)
145      **/
146     @Deprecated
147     public void saveToFile(File file) throws IOException {
148         ImageIO.write(getPickedImage(), defaultImageFormater, file);
149     }
150 
151     /** 储存为一个文件,为PNG格式 */
152     public void saveAsPNG(File file) throws IOException {
153         ImageIO.write(getPickedImage(), "png", file);
154     }
155 
156     /** 储存为一个JPEG格式图像文件 */
157     public void saveAsJPEG(File file) throws IOException {
158         ImageIO.write(getPickedImage(), "JPEG", file);
159     }
160 
161     /** 写入一个OutputStream */
162     public void write(OutputStream out) throws IOException {
163         ImageIO.write(getPickedImage(), defaultImageFormater, out);
164     }
165 
166     // singleton design pattern
167     private static ScreenCapture defaultCapturer = new ScreenCapture();
168     private int x1, y1, x2, y2;
169     private int recX, recY, recH, recW; // 截取的图像
170     private boolean isFirstPoint = true;
171     private BackgroundImage labFullScreenImage = new BackgroundImage();
172     private Robot robot;
173     private BufferedImage fullScreenImage;
174     private BufferedImage pickedImage;
175     private String defaultImageFormater = "png";
176     private JDialog dialog = new JDialog();
177 }
178 
179 /** 显示图片的Label */
180 class BackgroundImage extends JLabel {
181 
182     private static final long serialVersionUID = -7240053488099673743L;
183 
184     public void paintComponent(Graphics g) {
185         super.paintComponent(g);
186         g.drawRect(x, y, w, h);
187         String area = Integer.toString(w) + " * " + Integer.toString(h);
188         g.drawString(area, x + (int) w / 2 - 15, y + (int) h / 2);
189         g.drawLine(lineX, 0, lineX, getHeight());
190         g.drawLine(0, lineY, getWidth(), lineY);
191     }
192 
193     public void drawRectangle(int x, int y, int width, int height) {
194         this.x = x;
195         this.y = y;
196         h = height;
197         w = width;
198         repaint();
199     }
200 
201     public void drawCross(int x, int y) {
202         lineX = x;
203         lineY = y;
204         repaint();
205     }
206 
207     int lineX, lineY;
208     int x, y, h, w;
209 }
210