• JMF天昏地暗之路(二)-------打开摄像头并显示在屏幕上


    上一篇文章我已经说了一些比较基本的东西了,现在我来说一下如何用java打开本地摄像头并将当前摄像头的图片显示在屏幕上。

    我先把我写的一个测试代码发上来。

    /**
     * 这是一段打开摄像头并将当前图像显示出来的代码
     * @author 天下无双由我
     * @time    2013/12/15
     * @location  GDUT
     * */
    
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Frame;
    
    import javax.media.CaptureDeviceInfo;
    import javax.media.CaptureDeviceManager;
    import javax.media.Manager;
    import javax.media.MediaLocator;
    import javax.media.Player;
    import javax.swing.JFrame;
    
    
    public class openCamera extends JFrame{
    	
    	//获取驱动,这段代码我也是在网上参考的
    	public static Player player=null;
    	private CaptureDeviceInfo di=null;
    	private MediaLocator ml=null;
    	//str1,str2是用来记录当前设备的字符号
    	private String str1;	
    	private String str2;
    	
    	public openCamera(){	//是为了使图像显示出来弄的小界面
    		this.setVisible(true);
    		this.setBounds(200,200,300,300);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    	}
    	
    	public static void main(String args[]){
    		new openCamera().start(); 
    		
    	}
    	public  void start()
    	{	
    		
    		//视频设备的字符号,可以在JMStudio里面找到
    		str1 = "vfw:Logitech USB Video Camera:0";
    		str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
    		di = CaptureDeviceManager.getDevice(str2);
    		ml = di.getLocator();
    		try
    		{
    		player = Manager.createRealizedPlayer(ml);
    		player.start();
    		Component comp;
    		if ((comp = player.getVisualComponent()) != null)
    		{
    		   add(comp, BorderLayout.NORTH);
    		 }
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		
    	}
    }
    

    上面都有很详细的注释了,关于代码部分我就不多讲了,我就讲讲编译时候出现的问题吧。

    首先你要保证你已经把JMF包导进了你的这个项目文件中,如果没有的话,就按照以下步骤导入jar包。

    右键当前项目---->>Bulid Path--->Configure Bulid Path--->Libraries---->add External JAR

    然后选择导入jmf中的所有jar包。

    然后是编译了,要按下面的方法编译才行,不然有可能会出现一个问题,那就是

    LINEAR, Unknown Sample Rate

    * out *

    LINEAR, 8000.0 Hz, 16-bit, Stereo, LittleEndian, Signed, class [S

    未知的采样率问题,至于为什么会有这个问题,我也不清楚,网上很多人说是软件兼容性问题,我也不太清楚。

    编译的时候,直接在当前项目目录下的src/(default  package)上右键,选择Run AS/Java  Application,这样这段代码才能正常运行,好了,直接上运行后的图吧。





    本文的主要思路来源于CSDN的一篇文章,但是我现在找不到链接。我去。

    先写到这里吧,我的任务还没有弄完呢,后面的以后再继续慢慢x写。


    发表之后发现图片看不了,真是个坑!


  • 相关阅读:
    linux C总结篇(进程)
    进程与线程的区分
    递归的两种思路
    Linux下git与github的一般使用
    文件读写和文件指针的移动
    文件的创建,打开与关闭
    一个简单脚本
    linux 三剑客命令(grep,sed ,awk)
    常用正则表达式
    PAT:1002. A+B for Polynomials (25) 部分错误
  • 原文地址:https://www.cnblogs.com/qq84435/p/3664848.html
Copyright © 2020-2023  润新知