熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

Java中利用JMF編寫攝像頭拍照程序

2013-11-23 17:58:00  來源: Javascript 

  我把程序分為兩種有趣的和無趣的最近做了幾個有趣的項目其中一個應當就算是攝像頭拍照程序了用於現場拍照生成照片主要用到Java Media Framework(JMF)
  
  首先到SUN下載最新的JMF然後安裝media/jmf/indexjsp
  
  然後說一下需求
  
  . 用攝像頭拍照
  
  . 在文本框輸入文件名
  
  . 按下拍照按鈕獲取攝像頭內的圖像
  
  . 在拍下的照片上有一紅框截取固定大小的照片
  
  . 保存為本地圖像為jpg格式不得壓縮畫質
  
  技術關鍵相信也是大家最感興趣的部分也就是如何讓一個攝像頭工作並拍下一張照片了
  
  利用JMF代碼很簡單
  
  //利用這三個類分別獲取攝像頭驅動和獲取攝像頭內的圖像流獲取到的圖像流是一個Swing的Component組件類
  
  public static Player player = null;
  private CaptureDeviceInfo di = null;
  private MediaLocator ml = null;
  
  //文檔中提供的驅動寫法為何這麼寫我也不知
  
  String str = vfw:Logitech USB Video Camera:;
  String str = vfw:Microsoft WDM Image Capture (Win):;
  di = CaptureDeviceManagergetDevice(str);
  ml = digetLocator();
  try
  {
  player = ManagercreateRealizedPlayer(ml);
  playerstart();
  Component comp;
  if ((comp = playergetVisualComponent()) != null)
  {
  add(comp BorderLayoutNORTH);
  }
  }
  catch (Exception e)
  {
  eprintStackTrace();
  }
  
  接下來就是點擊拍照獲取攝像頭內的當前圖像
  
  代碼也是很簡單
  
  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) egetSource();
  if (c == capture)//如果按下的是拍照按鈕
  {
  FrameGrabbingControl fgc =(FrameGrabbingControl)  playergetControl(ntrolFrameGrabbingControl);
  buf = fgcgrabFrame(); // 獲取當前祯並存入Buffer類
  btoi = new BufferToImage((VideoFormat) bufgetFormat());
  img = btoicreateImage(buf); // show the image
  imgpanelsetImage(img);
  }
  
  保存圖像的就不多說了以下為示例代碼
  
  BufferedImage bi = (BufferedImage) createImage(imgWidth imgHeight);
  GraphicsD g = bicreateGraphics();
  gdrawImage(img null null);
  FileOutputStream out = null;
  try
  {
  out = new FileOutputStream(s);
  }
  catch (javaioFileNotFoundException io)
  {
  Systemoutprintln(File Not Found);
  }
  
  JPEGImageEncoder encoder = JPEGCodeccreateJPEGEncoder(out);
  JPEGEncodeParam param = encodergetDefaultJPEGEncodeParam(bi);
  paramsetQuality(f false);//不壓縮圖像
  encodersetJPEGEncodeParam(param);
  try
  {
  encoderencode(bi);
  outclose();
  }
  catch (javaioIOException io)
  {
  Systemoutprintln(IOException);
  }
  
  已經申請將JWebCam建立為一個開源項目放到GRO大家發揮自己的想象力加入自己的代碼吧比如拍攝視頻添加圖像處理功能等等
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25453.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.