用java的Robot類(lèi)來(lái)實(shí)現(xiàn)屏幕抓圖

          主要使用的是java.util.Robot類(lèi)來(lái)捕獲屏幕,可以實(shí)現(xiàn)對(duì)屏幕一個(gè)矩形區(qū)域的捕獲,通過(guò)這個(gè)類(lèi),我們也可以實(shí)現(xiàn)一個(gè)遠(yuǎn)程桌面控制的程序。

          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.*;
          /**@Author Qiu_BaiChao
          *一個(gè)簡(jiǎn)單的屏幕抓圖
          如抓取http://www.bt285.cn/content.php?id=1196863 中的甜性澀愛(ài)的照片。
          *
          *
          */

          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;
          }

          /**捕捉屏幕的一個(gè)矯形區(qū)域
          */

          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());
          }

          /**儲(chǔ)存為一個(gè)文件,為PNG格式
          *
          @deprecated
          *replaced by saveAsPNG(File file)
          *
          */

          @Deprecated
          public void saveToFile(File file) throws IOException{
          ImageIO.write(getPickedImage(),defaultImageFormater,file);
          }

          /**儲(chǔ)存為一個(gè)文件,為PNG格式*/
          public void saveAsPNG(File file) throws IOException {
          ImageIO.write(getPickedImage(),
          "png",file);
          }

          /**儲(chǔ)存為一個(gè)JPEG格式圖像文件*/
          public void saveAsJPEG(File file) throws IOException {
          ImageIO.write(getPickedImage(),
          "JPEG",file);

          posted on 2009-02-12 18:33 wang9354 閱讀(2248) 評(píng)論(0)  編輯  收藏

          導(dǎo)航

          <2009年2月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          1234567

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆檔案

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 南乐县| 陵川县| 临漳县| 玛沁县| 铁力市| 宝丰县| 东海县| 霞浦县| 杨浦区| 吴堡县| 晴隆县| 宝丰县| 洮南市| 偏关县| 芦山县| 石狮市| 民丰县| 漯河市| 林西县| 商丘市| 富顺县| 彩票| 衢州市| 临泽县| 南宫市| 东阿县| 桂林市| 昂仁县| 沙田区| 赤城县| 张北县| 大同市| 阿巴嘎旗| 滨海县| 东乌珠穆沁旗| 阳高县| 彰化市| 盈江县| 汤阴县| 瑞昌市| 五峰|