Java中利用JMF編寫網路攝影機拍照程式

來源:互聯網
上載者:User
程式 首先到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");
}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.