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

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值