亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? livestream.java

?? java的JMF實現了圖片的抓取功能。調試通過。
?? JAVA
字號:
package com.sun.media.protocol.screen;

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.media.*;
import javax.media.format.*;
import javax.media.protocol.*;
import java.io.IOException;
import java.util.StringTokenizer;

// 實時數據流類:實時采集屏幕數據
public class LiveStream implements PushBufferStream, Runnable {
  protected int maxDataLength;       // 圖像最大長度
  protected int [] data;             // 存放圖像數據的數組
  protected RGBFormat rgbFormat;     // 圖像采集格式
  protected boolean started;         // 是否開始采集的標志
  protected Thread thread;           // 圖像采集子線程
  protected float frameRate = 1f;         // 圖像采集的幀率
  protected BufferTransferHandler transferHandler;      // 緩沖區傳輸句柄
  protected Control [] controls = new Control[0];       // 控制器數組
  protected int x, y, width, height;         // 采集區域的開始(左上點)坐標和尺寸

  protected Robot robot = null;              // 獲取屏幕數據的類對象

  int seqNo = 0;                             // 圖像序列號

  // 構造函數
  public LiveStream(MediaLocator locator) {
    try {
      parseLocator(locator);    // 解析媒體定位器
    }
    catch (Exception e) {
      System.err.println(e);
    }

    try {
      robot = new Robot();                 // 在主屏幕坐標系下構造一個Robot對象
    }
    catch (AWTException awe) {
      throw new RuntimeException("");
    }

    Dimension size = new Dimension(width, height);     // 得到采集圖像的尺寸
    maxDataLength = size.width * size.height * 3;      // 圖像數據最大長度
    rgbFormat = new RGBFormat(size, maxDataLength,Format.intArray,
                              frameRate,32,0xFF0000, 0xFF00, 0xFF,
                              1, size.width,VideoFormat.FALSE,Format.NOT_SPECIFIED);
                   // 構造一個RGB格式

    data = new int[maxDataLength];                // 初始化數據數組
    thread = new Thread(this, "Screen Grabber");  // 初始化采集線程
  }

  // 解析媒體定位器,得到采集屏幕圖像的參數
  protected void parseLocator(MediaLocator locator) {
    String rem = locator.getRemainder();      // 得到媒體定位器的字符串描述,不包括前面的協議名
    while (rem.startsWith("/") && rem.length() > 1)      // 去掉字符串前面的"/"
      rem = rem.substring(1);
    StringTokenizer st = new StringTokenizer(rem, "/");  // 用“/”作為分割符分割rem字符串
    if (st.hasMoreTokens()) {       // 如果rem中“/”之后有字符串
      String position = st.nextToken();    // 得到該字符串
      StringTokenizer nums = new StringTokenizer(position, ",");   // 用“,”作為分割符分割position字符串
      String stX = nums.nextToken();      // 得到采集圖像左上點的橫坐標
      x = Integer.parseInt(stX);
      String stY = nums.nextToken();      // 得到采集圖像左上點的縱坐標
      y = Integer.parseInt(stY);
      String stW = nums.nextToken();      // 得到采集圖像的寬度
      width = Integer.parseInt(stW);
      String stH = nums.nextToken();      // 得到采集圖像的高度
      height = Integer.parseInt(stH);
    }
    if (st.hasMoreTokens()) {       // 如果rem中“/”之后有字符串
      String stFPS = st.nextToken();       // 得到該字符串
      frameRate = (Double.valueOf(stFPS)).floatValue();     // 轉換為圖像采集的幀率
    }
  }

  // 通知開始或停止采集
  void start(boolean started) {
    synchronized ( this ) {
      this.started = started;
      if (started && !thread.isAlive()) {    // 如果是開始采集
        thread = new Thread(this);
        thread.start();      // 開始采集線程
      }
      notifyAll();           // 通知等待過程
    }
  }

  /***************************************************************************
   * 下面幾個函數實現了 PushBufferStream 接口
   ***************************************************************************/

  // 得到圖像采集格式
  public Format getFormat() {
    return rgbFormat;
  }

  // 從數據源讀數據到緩沖區
  public void read(Buffer buffer) throws IOException {
    synchronized (this) {
      Object outdata = buffer.getData();
      if (outdata == null || !(outdata.getClass() == Format.intArray) ||
         ((int[])outdata).length < maxDataLength) {
        outdata = new int[maxDataLength];
        buffer.setData(outdata);             // 設置緩沖區中存放數據的單元
      }
      buffer.setFormat( rgbFormat );         // 設置采集格式
      buffer.setTimeStamp( (long) (seqNo * (1000 / frameRate) * 1000000) );   // 設置時間戳(以納秒為單位),給出了該幀圖像的表現時間
      BufferedImage bi = robot.createScreenCapture(new Rectangle(x, y, width, height));
                                              // 讀給定的屏幕區域產生一幅圖像
      bi.getRGB(0, 0, width, height,(int[])outdata, 0, width);     // 得到RGB圖像數據,存在緩沖區的outdata單元中
      buffer.setSequenceNumber( seqNo );     // 設置圖像序列號
      buffer.setLength(maxDataLength);       // 設置緩沖區中的數據長度
      buffer.setFlags(Buffer.FLAG_KEY_FRAME);   // 設置采集的圖像為關鍵幀
      buffer.setHeader( null );
      seqNo++;                                  // 圖像序列號加1
    }
  }

  // 設置緩沖區傳輸句柄,以便數據準備好時通知緩沖區
  public void setTransferHandler(BufferTransferHandler transferHandler) {
    synchronized (this) {
      this.transferHandler = transferHandler;
      notifyAll();      // 通知等待過程
    }
  }

   /***************************************************************************
   * 下面這幾個函數實現了 SourceStream 接口,因為 public interface PushBufferStream extends SourceStream
   ***************************************************************************/

  // 得到數據源數據類型的描述
  public ContentDescriptor getContentDescriptor() {
    ContentDescriptor cd = new ContentDescriptor(ContentDescriptor.RAW);    // 內容描述
    return cd;
  }

  // 得到數據流的長度
  public long getContentLength() {
    return LENGTH_UNKNOWN;
  }

  // 判斷數據流是否結束
  public boolean endOfStream() {
    return false;
  }

   /***************************************************************************
   * 下面幾個函數實現了 Controls 接口,因為 public interface SourceStream extends Controls
   ***************************************************************************/

  // 得到所有控制器
  public Object [] getControls() {
    return controls;
  }

  // 得到特定類型的控制器
  public Object getControl(String controlType) {
    try {
      Class  cls = Class.forName(controlType);
      Object cs[] = getControls();
      for (int i = 0; i < cs.length; i++) {
        if (cls.isInstance(cs[i]))
          return cs[i];
      }
      return null;
    }
    catch (Exception e) {
      return null;
    }
  }

  /***************************************************************************
   * 下面這個函數實現了 Runnable 接口
   ***************************************************************************/

  // 采集線程的執行體
  public void run() {
    while (started) {                      // 不斷采集數據直到通知停止
      synchronized (this) {
        while (transferHandler == null && started) {    // 等待傳輸句柄與數據流連接好并被告知開始采集
          try {
            wait(1000);
          }
          catch (InterruptedException ie) { }
        } // while
      }

      if (started && transferHandler != null) {
        transferHandler.transferData(this);     // 向緩沖區中寫數據,形成“推”數據流
        try {
          Thread.currentThread().sleep( 10 );
        }
        catch (InterruptedException ise) { }
      }
    } // while (started)
  } // run

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久9999| 国内久久精品视频| 美国十次综合导航| 99精品视频在线免费观看| 91精品国产色综合久久不卡蜜臀 | 久久99精品久久久久久动态图| 成人不卡免费av| 欧美本精品男人aⅴ天堂| 亚洲成人动漫精品| 91片黄在线观看| 国产无一区二区| 美腿丝袜在线亚洲一区| 精品视频一区二区三区免费| 中文字幕一区二区三区不卡在线 | 亚洲国产综合人成综合网站| 国产成人av网站| 日韩欧美精品在线视频| 五月综合激情婷婷六月色窝| 日本高清不卡视频| 亚洲激情中文1区| gogogo免费视频观看亚洲一| 中文字幕精品一区二区三区精品| 九九在线精品视频| 日韩免费一区二区| 蜜臀av国产精品久久久久| 欧美亚洲高清一区二区三区不卡| 中文字幕制服丝袜一区二区三区| 国产精品99久久久久久宅男| 欧美成人a视频| 久久国产精品72免费观看| 欧美美女视频在线观看| 亚洲一区中文在线| 在线亚洲高清视频| 亚洲在线一区二区三区| 欧美三级韩国三级日本一级| 一区二区三区精品视频| 在线免费观看日本欧美| 亚洲v日本v欧美v久久精品| 在线观看中文字幕不卡| 亚洲v精品v日韩v欧美v专区 | 色悠久久久久综合欧美99| 亚洲精品乱码久久久久久久久 | 91在线观看污| 亚洲乱码精品一二三四区日韩在线| 99在线视频精品| 亚洲自拍偷拍av| 日韩欧美国产一区二区在线播放 | 蜜乳av一区二区| 久久免费视频一区| 成人av资源在线观看| 亚洲人成在线观看一区二区| 欧洲视频一区二区| 日韩av午夜在线观看| 欧美精品一区二区三区蜜桃视频| 国产做a爰片久久毛片| 中文字幕一区二区三区乱码在线 | 成人a免费在线看| 亚洲综合激情网| 精品福利二区三区| caoporm超碰国产精品| 亚洲国产日韩a在线播放性色| 日韩无一区二区| 国产91精品一区二区麻豆网站| 亚洲色图欧洲色图婷婷| 欧美日韩高清在线播放| 国产精品123| 亚洲一区二区三区四区在线观看 | 亚洲日本韩国一区| 欧美巨大另类极品videosbest | 欧美三电影在线| 国模套图日韩精品一区二区| 一区二区三区资源| 日韩欧美国产一区二区三区 | 成人黄色av网站在线| 午夜电影网一区| 18成人在线观看| 欧美www视频| 欧美日韩一二区| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 中文av一区二区| 欧美一区二区三区白人| 91香蕉视频污| 国产ts人妖一区二区| 日韩av成人高清| 亚洲一区日韩精品中文字幕| 国产日韩视频一区二区三区| 欧美日韩不卡在线| 色狠狠桃花综合| 国产成人亚洲综合色影视| 日本中文在线一区| 亚洲最色的网站| 国产精品国产三级国产普通话99| 日韩欧美高清一区| 欧美丰满美乳xxx高潮www| 色综合欧美在线| 不卡高清视频专区| 国产成人自拍网| 国产呦萝稀缺另类资源| 日韩av不卡一区二区| 亚洲成人免费电影| 一区二区三区高清| 亚洲午夜羞羞片| 亚洲欧美激情小说另类| 亚洲天堂网中文字| 性做久久久久久免费观看欧美| 国产日韩欧美电影| 久久精品在这里| 久久综合av免费| 久久久99精品久久| 久久久一区二区| 国产嫩草影院久久久久| 国产日产欧美一区二区视频| 国产色综合一区| 国产日本欧美一区二区| 国产三级精品三级在线专区| 欧美国产一区二区| 国产精品乱码人人做人人爱 | 91浏览器在线视频| 99久久婷婷国产精品综合| 不卡视频免费播放| 色哟哟亚洲精品| 欧美日韩视频在线观看一区二区三区 | 欧美一区日韩一区| 日韩你懂的在线观看| 精品国内二区三区| 久久久久久夜精品精品免费| 日本一区二区三区在线观看| 中文字幕免费一区| 一二三区精品福利视频| 亚洲va天堂va国产va久| 五月天网站亚洲| 麻豆专区一区二区三区四区五区| 老鸭窝一区二区久久精品| 黄网站免费久久| 国产91在线|亚洲| 在线国产电影不卡| 日韩视频国产视频| 国产精品美女一区二区| 亚洲老妇xxxxxx| 美女任你摸久久| 成人app软件下载大全免费| 欧美综合亚洲图片综合区| 6080午夜不卡| 中文字幕免费一区| 午夜免费久久看| 国产原创一区二区三区| av在线播放成人| 日韩欧美在线不卡| 最新中文字幕一区二区三区| 日韩激情一二三区| 成人免费视频视频在线观看免费| 日本道色综合久久| 欧美精品一区二区精品网| 亚洲制服丝袜在线| 国产一区二区三区香蕉| 欧美网站大全在线观看| www日韩大片| 亚洲一区二区高清| 国产精品一区一区| 欧美妇女性影城| 亚洲男人的天堂一区二区| 久久国产综合精品| 在线观看国产日韩| 国产精品美女一区二区在线观看| 日本麻豆一区二区三区视频| 99国产精品国产精品久久| 日韩免费观看高清完整版在线观看| 亚洲欧美日韩国产一区二区三区| 麻豆视频观看网址久久| 欧美亚州韩日在线看免费版国语版| xf在线a精品一区二区视频网站| 亚洲高清免费视频| jlzzjlzz亚洲日本少妇| 精品国产电影一区二区| 午夜精品久久久久久久久久| 99视频在线精品| 国产偷国产偷亚洲高清人白洁| 午夜精品久久久久久久| 91麻豆国产自产在线观看| 久久久久久久久久久久久夜| 蜜臀久久久99精品久久久久久| 色婷婷亚洲综合| 中文字幕日本乱码精品影院| 国产精品一区二区久久不卡| 日韩欧美中文字幕一区| 日韩影院在线观看| 欧美揉bbbbb揉bbbbb| 亚洲一区在线观看视频| 91久久精品一区二区| 自拍偷拍亚洲综合| 不卡一区中文字幕| 中文字幕日韩一区| 99精品视频一区| 日韩码欧中文字| 一本到不卡精品视频在线观看| 中文在线一区二区| 不卡一二三区首页| 亚洲卡通动漫在线| 欧美综合一区二区| 亚洲电影在线播放|