用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");
}
}