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