Java中利用JMF编写摄像头拍照程序

伶俜蕙

伶俜蕙

2016-01-29 12:55

Java中利用JMF编写摄像头拍照程序,Java中利用JMF编写摄像头拍照程序
  我把程序分为两种,有趣的和无趣的,最近做了几个有趣的项目,其中一个,应当就算是摄像头拍照程序了。用于现场拍照,生成照片,主要用到Java Media Framework(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 = "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");
  }

  已经申请将JWebCam建立为一个开源项目,放到GRO,大家发挥自己的想象力加入自己的代码吧,比如拍摄视频,添加图像处理功能,等等。
2005年5月10日 2005年3月30日 2005年3月30日 2005年3月30日 2005年3月30日 2005年3月30日 2005年3月29日 2005年3月29日 2005年3月29日 2005年3月29日 2005年3月28日 2005年3月28日
展开更多 50%)
分享

猜你喜欢

Java中利用JMF编写摄像头拍照程序

Java JAVA基础
Java中利用JMF编写摄像头拍照程序

利用JMF编写摄像头拍照程序

Web开发
利用JMF编写摄像头拍照程序

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

玩玩QQ像册的“摄像头拍照”功能

电脑入门
玩玩QQ像册的“摄像头拍照”功能

thinkpad t420摄像头拍照教程

电脑入门
thinkpad t420摄像头拍照教程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

QQ空间相册新增“摄像头拍照功能”

电脑入门
QQ空间相册新增“摄像头拍照功能”

利用Delphi编程控制摄像头

Delphi
利用Delphi编程控制摄像头

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

鼠绘动物技术内幕

鼠绘动物技术内幕

《神之刃》非R党全攻略

《神之刃》非R党全攻略
下拉加载更多内容 ↓