文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» Java » Java中利用JMF编写摄像头拍照程序       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: [转载] Java中利用JMF编写摄像头拍照程序  ( 查看:360  回复:0 )   
 
yhn567
新新人类  点击可查看详细



帖子 32
精华 0
无忧币 180
积分 170
阅读权限 20
注册日期 2007-8-20
最后登录 2007-8-24 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-8-21 13:31   标题:Java中利用JMF编写摄像头拍照程序
上一帖 |
首先到SUN下载最新的JMF,然后安装。http://java.sun.com/products/java-media/jmf/index.jsp

  然后,说一下需求

  1. 用摄像头拍照

  2. 在文本框输入文件名

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

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

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

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

  利用JMF,代码很简单:

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

public static Player player = null;
private CaptureDeviceInfo di = null;
private MediaLocator ml = null;

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

String str1 = "vfwogitech 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");
}



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2007-8-21 13:311楼
[ 顶部 ]
     
论坛跳转:  

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号