jmf.jar 在 classpath。
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(); }
}
}
CaptureDeviceManager 列舉裝置,Manager.createRealizedPlayer 建立並實現 Player。player.getVisualComponent() 返回 Swing/AWT Component,直接加入介面顯示即時畫面。FrameGrabbingControl.grabFrame() 擷取單幀 Buffer,轉換為 BufferedImage。Graphics2D 繪製紅框並裁切固定區域,ImageIO.write 輸出 JPEG (品質 1.0)。CaptureDeviceInfo 選擇邏輯。本文來自編程入門網:原文連結