java操作攝像頭截圖

openkk 12年前發布 | 30K 次閱讀 圖形/圖像處理 Java

本來sun有個jmf組件可以很方便的實現攝像頭截圖的,不過這版本后來停止更新了,當前官網最新版本為Java Media Framework (JMF) 2.1.1e,下載回來,在windows 7 32位上使用,居然不能運行,網上另外找了個jmf的替代框架fmj使用,截圖實現代碼:

package com.pengo.capture;

import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.media.MediaLocator; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import net.sf.fmj.ui.application.CaptureDeviceBrowser; import net.sf.fmj.ui.application.ContainerPlayer; import net.sf.fmj.ui.application.PlayerPanelPrefs;

public class CameraFrame extends JFrame{ private static int num = 0; public CameraFrame() throws Exception{ this.setTitle("攝像頭截圖應用"); this.setSize(480, 500); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel cameraPanel = new JPanel(); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(cameraPanel, BorderLayout.CENTER); ContainerPlayer containerPlayer = new ContainerPlayer(cameraPanel); MediaLocator locator = CaptureDeviceBrowser.run(null); //彈出攝像頭設備選擇

// MediaLocator locator = null; // GlobalCaptureDevicePlugger.addCaptureDevices(); // Vector vectorDevices = CaptureDeviceManager.getDeviceList(null); // if (vectorDevices == null || vectorDevices.size() == 0) // { // System.out.println("沒有攝像頭==="); // return; // } // //選擇第一個攝像頭設備 // for ( int i = 0; i < vectorDevices.size(); i++ ) // { // CaptureDeviceInfo infoCaptureDevice = (CaptureDeviceInfo) vectorDevices.get(i); // System.out.println("設備名===============" + infoCaptureDevice.getName()); // //選擇第一個設備為程序使用,如果存在多個設備時,則第一個可能不是攝像頭 // locator = infoCaptureDevice.getLocator(); // break; // }

    PlayerPanelPrefs prefs = new PlayerPanelPrefs();
    containerPlayer.setMediaLocation(locator.toExternalForm(), prefs.autoPlay);

    JPanel btnPanel = new JPanel(new BorderLayout());
    final JTextField path = new JTextField("E:\\camera");
    path.setColumns(30);
    btnPanel.add(path, BorderLayout.WEST);
    JButton okBtn = new JButton("截圖");
    okBtn.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
             Dimension imageSize = cameraPanel.getSize();
                BufferedImage image = new BufferedImage(imageSize.width,
                        imageSize.height, BufferedImage.TYPE_INT_ARGB);
                Graphics2D g = image.createGraphics();
                cameraPanel.paint(g);
                g.dispose();
                try {

                    String filePath = path.getText();
                    File file = new File(filePath);
                    if(file.exists() == false){
                        file.mkdirs();
                    }
                    ImageIO.write(image, "png", new File(file.getAbsolutePath() + "/" + num + ".png"));
                    num++;
                } catch (IOException ex) {
                    ex.printStackTrace();

                }
         }
    });
    btnPanel.add(okBtn, BorderLayout.EAST);
    this.getContentPane().add(btnPanel, BorderLayout.SOUTH);
}

public static void main(String[] args) throws Exception{
    CameraFrame camera = new CameraFrame();
    camera.setVisible(true);
}

}</pre>轉自:http://ai-longyu.iteye.com/blog/1556025</span>

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!