首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2SE

利用 JMF (Java Media Framework) 實現攝影機拍照功能

     編輯:J2SE

專案需求

  • 啟動攝影機預覽畫面。
  • 輸入檔名,按下拍照按鈕擷取當前影像。
  • 在畫面上顯示紅框指示裁切區域,固定尺寸裁切。
  • 儲存為高畫質 JPEG (不壓縮)。

環境準備

  1. 下載安裝最新 JMF:Sun 官網
  2. 確認 jmf.jar 在 classpath。

核心技術:JMF Player 與元件


import javax.media.*;
import javax.media.control.*;
import java.awt.Component;

public class CameraCapture {
    public static Player player = null;

    public void initCamera() {
        try {
            // 1. 取得攝影機裝置資訊
            Vector devices = CaptureDeviceManager.getDeviceList(null);
            CaptureDeviceInfo cam = devices.firstElement(); // 簡化:取第一個
            // 2. 建立 Player 並實現
            player = Manager.createRealizedPlayer(cam.getLocator());
            player.start();
            // 3. 取得視覺元件 (Component) 加入 UI
            Component visual = player.getVisualComponent();
            // 將 visual 加入 JFrame/JPanel 顯示預覽
        } catch (Exception e) { e.printStackTrace(); }
    }

    public void capturePhoto(String fileName) {
        try {
            FrameGrabbingControl fgc = (FrameGrabbingControl)
                player.getControl("javax.media.control.FrameGrabbingControl");
            Buffer buf = fgc.grabFrame();
            // 將 Buffer 轉為 BufferedImage,裁切紅框區域,存檔 JPEG
        } catch (Exception e) { e.printStackTrace(); }
    }
}

關鍵步驟說明

  1. CaptureDeviceManager 列舉裝置,Manager.createRealizedPlayer 建立並實現 Player。
  2. player.getVisualComponent() 返回 Swing/AWT Component,直接加入介面顯示即時畫面。
  3. FrameGrabbingControl.grabFrame() 擷取單幀 Buffer,轉換為 BufferedImage。
  4. 使用 Graphics2D 繪製紅框並裁切固定區域,ImageIO.write 輸出 JPEG (品質 1.0)。

注意事項

  • JMF 已停止更新,現代專案建議改用 OpenCV (JavaCV) 或 LTI-Civil 等活躍庫。
  • 跨平台裝置存取可能需調整 CaptureDeviceInfo 選擇邏輯。
  • 簽名 Applet/WebStart 需權限存取攝影機。

本文來自編程入門網:原文連結

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved