`

JAVA代码调用客户端摄像头 初步探讨

    博客分类:
  • OPEN
阅读更多
首先到sun下载最新的jmf,然后安装。

  然后,说一下需求

  1.   用摄像头拍照

  2.   在文本框输入文件名

  3.   按下拍照按钮,获取摄像头内的图像

  4.   在拍下的照片上有一红框截取固定大小的照片。

  5.   保存为本地图像为jpg格式,不得压缩画质

  技术关键,相信也是大家最感兴趣的部分也就是如何让一个摄像头工作,并拍下一张照片了。

  利用jmf,代码很简单:

//利用这三个类分别获取摄像头驱动,和获取摄像头内的图像流,获取到的图像流是一个swing的component组件类

public   static   player   player   =   null; 
private   capturedeviceinfo   di   =   null; 
private   medialocator   ml   =   null; 

//文档中提供的驱动写法,为何这么写我也不知:)

string   str1   =   "vfw:logitech   usb   video   camera:0 "; 
string   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(); 
}   

  接下来就是点击拍照,获取摄像头内的当前图像。

  代码也是很简单:

private   jbutton   capture; 
private   buffer   buf   =   null; 
private   buffertoimage   btoi   =   null; 
private   imagepanel   imgpanel   =   null; 
private   image   img   =   null; 
private   imagepanel   imgpanel   =   null; 

jcomponent   c   =   (jcomponent)   e.getsource(); 
if   (c   ==   capture)//如果按下的是拍照按钮   
{   
 framegrabbingcontrol   fgc   =(framegrabbingcontrol)    player.getcontrol( "javax.media.control.framegrabbingcontrol "); 
 buf   =   fgc.grabframe();   //   获取当前祯并存入buffer类 
 btoi   =   new   buffertoimage((videoformat)   buf.getformat()); 
 img   =   btoi.createimage(buf);   //   show   the   image   
 imgpanel.setimage(img); 
}   

  保存图像的就不多说了,以下为示例代码

bufferedimage   bi   =   (bufferedimage)   createimage(imgwidth,   imgheight); 
graphics2d   g2   =   bi.creategraphics(); 
g2.drawimage(img,   null,   null); 
fileoutputstream   out   =   null; 
try 
{ 
 out   =   new   fileoutputstream(s); 
} 
catch   (java.io.filenotfoundexception   io) 
{ 
 system.out.println( "file   not   found "); 
} 

jpegimageencoder   encoder   =   jpegcodec.createjpegencoder(out); 
jpegencodeparam   param   =   encoder.getdefaultjpegencodeparam(bi); 
param.setquality(1f,   false);//不压缩图像 
encoder.setjpegencodeparam(param); 
try 
{ 
 encoder.encode(bi); 
 out.close(); 
} 
catch   (java.io.ioexception   io) 
{ 
 system.out.println( "ioexception "); 
}
把.jar文件导入。下载了jmf后需要安装,安装后你的那个jmf目录下就会有一个lib文件夹里面有.jar文件,然后打开eclipse,右键选择你的工程-〉属性-〉java   build   path-> library-〉add   external   jars   找到你的jmf目录下lib的那个文件夹然后选中那些文件导入就ok了。
然后利用工具提供的导入文件帮助,一个一个导就OK了
分享到:
评论
4 楼 LanceDream 2013-03-28  
楼主代码有很多问题,本来有的大写字母变成小写的了(如String、Player和CaptureDeviceInfo等)。而且说的也很一般,很让人费解!!!
3 楼 扎尔伯格 2012-05-15  
抄别人的吧
2 楼 andyihk 2011-04-10  
博主懂的还真多啊。。。
1 楼 andyihk 2011-04-10  

相关推荐

Global site tag (gtag.js) - Google Analytics