Keep Moving

          一個人倘若需要從思想中得到快樂,那么他的第一個欲望就是學習。
          隨筆 - 16, 文章 - 10, 評論 - 1, 引用 - 0
          數(shù)據(jù)加載中……

          java利用jmf實現(xiàn)拍照功能

          首先到SUN下載最新的JMF,然后安裝。http://java.sun.com/products/java-media/jmf/index.jsp 

          然后,說一下需求

          1. 用攝像頭拍照

          2. 在文本框輸入文件名

          3. 按下拍照按鈕,獲取攝像頭內(nèi)的圖像

          4. 在拍下的照片上有一紅框截取固定大小的照片。

          5. 保存為本地圖像為jpg格式,不得壓縮畫質(zhì)

          技術(shù)關(guān)鍵,相信也是大家最感興趣的部分也就是如何讓一個攝像頭工作,并拍下一張照片了。

          利用JMF,代碼很簡單:

          //利用這三個類分別獲取攝像頭驅(qū)動,和獲取攝像頭內(nèi)的圖像流,獲取到的圖像流是一個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();
          }

          接下來就是點擊拍照,獲取攝像頭內(nèi)的當前圖像。

          代碼也是很簡單:

           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)//如果按下的是拍照按鈕 http://www.5a520.cn
          {
          FrameGrabbingControl fgc =(FrameGrabbingControl)player.getControl
          ("javax.media.control.FrameGrabbingControl");
          buf = fgc.grabFrame(); // 獲取當前禎并存入Buffer類 http://www.bt285.cn
          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);//不壓縮圖像 http://www.bt285.cn
          encoder.setJPEGEncodeParam(param);
          try
          {
          encoder.encode(bi);
          out.close();
          }
          catch (java.io.IOException io)
          {
          System.out.println("IOException");
          }

          已經(jīng)申請將JWebCam建立為一個開源項目,放到GRO,大家發(fā)揮自己的想象力加入自己的代碼吧,比如拍攝視頻,添加圖像處理功能,等等

          posted on 2009-05-22 15:45 BruceLeey 閱讀(176) 評論(0)  編輯  收藏 所屬分類: 雜亂


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 邯郸县| 玛曲县| 巩义市| 蓬安县| 宜良县| 施秉县| 石嘴山市| 富源县| 黄梅县| 昌平区| 德令哈市| 探索| 崇明县| 英山县| 江川县| 汶川县| 察隅县| 从化市| 福安市| 定远县| 保德县| 连山| 巩留县| 稻城县| 始兴县| 运城市| 漾濞| 延边| 桂阳县| 天津市| 赤壁市| 务川| 抚松县| 溆浦县| 蒙自县| 丰宁| 昔阳县| 五常市| 福建省| 乳山市| 隆安县|