posts - 59, comments - 244, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          java攝像頭截圖

          Posted on 2012-06-09 01:04 penngo 閱讀(4909) 評論(2)  編輯  收藏 所屬分類: 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(480500);
                  
          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);
              }

          }

          附件源碼

          評論

          # re: java攝像頭截圖  回復  更多評論   

          2012-07-05 12:42 by guanzhenxing
          學習了!

          # re: java攝像頭截圖  回復  更多評論   

          2013-04-01 15:54 by 千山鳥飛絕
          你好,我試用了你的示例,發現截圖還不行,保存的圖片是空白,沒有截圖成功。

          我的攝像頭選擇是:vfw:Mircrosoft WDM Image Capture.
          主站蜘蛛池模板: 华容县| 剑阁县| 克拉玛依市| 奉化市| 邛崃市| 淳安县| 淮北市| 贵港市| 涡阳县| 郴州市| 遂昌县| 湘潭县| 大厂| 云林县| 大化| 朔州市| 巴彦淖尔市| 蒙山县| 禹州市| 茶陵县| 蒙城县| 安达市| 香港| 盐池县| 察雅县| 云浮市| 呼和浩特市| 万荣县| 吐鲁番市| 油尖旺区| 安康市| 新建县| 亚东县| 景德镇市| 屏东市| 泗阳县| 阳江市| 建水县| 澎湖县| 即墨市| 兴安县|