用JMF調用攝像頭驅動並顯示到窗體

用JMF調用攝像頭驅動並拍照

http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-client-419417.html#7372-jmf-2.1.1e-oth-JPR
這裏下載JMF

我的系統是win7 64位,裝的64位JDK,64位eclipse.
注意JMF只支持32位,如果JDK是64位的不支持,我本來的JDK就是64位,後來又安裝了一個32的JDK,現在32位eclipse和64位eclipse能同時運行。雖然我也不知道爲什麼。。。系統環境變量裏面還是64位JDK的路徑,32位eclipse能運行我也懶得改。
安裝JMF,沒有什麼注意的,一路next,沒出現什麼問題。
裝好了我發現import javax.media.*就不報錯了。。。貌似JMF安裝的時候自動設置好了classpath,我哪裏都沒動。。。
如果報錯的話,看情況手動導入jmf.jar,sound.jar,mediaplayer.jar
還有裝好JMF之後要運行JMStudio.exe,選文件-屬性,Capture Devices選項卡,點最下面Detect Capture Devices
然後中間會出現那幾個驅動。。。這就說明JMF已經找到驅動了。之前就是這一步有問題,以前裝64位的找不到驅動。
然後就可以寫程序了。
我從網上找到了一些範例,參考了一些,改了改,親測能用。

如下是最精簡的代碼

import java.awt.BorderLayout;
import java.awt.Component;
import java.io.IOException;

import javax.media.CannotRealizeException;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.swing.JFrame;

public class MyCapture extends JFrame{
 public MyCapture(){
  this.setTitle("MyCapture");
  this.setBounds(500,100,800,500);
  this.setVisible(true);
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
 public void start(){
  String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
  CaptureDeviceInfo di = null;
  MediaLocator ml = null;
  Player player=null;
  
  di=CaptureDeviceManager.getDevice(str2);
  ml = di.getLocator();
//  System.out.println(di);
//  System.out.println(ml); 
  try {
   player=Manager.createRealizedPlayer(ml);
  } catch (NoPlayerException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (CannotRealizeException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   //e.printStackTrace();
  }
  if(player!=null)
   player.start();
  Component comp = null;
        if((comp=player.getVisualComponent())!=null)
            add(comp,BorderLayout.CENTER);
 }
 public static void main(String[] args){
  MyCapture mc = new MyCapture();
  mc.start();
  //System.out.println("sss");
 }
}

 

發佈了43 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章