Flash教程:利用 Flash 8 制作攝像頭拍照功能_Flash教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:Flash實例教程:用Flash簡單制作相冊
      [前言]1、在閃吧論壇上看到了高手tiger_0309制作的其中一個相冊,簡單但效果不錯,仔細研究了一番,“采他山之玉,攻己山之石”,并作了一些改動:①代碼寫在

      前幾天幫朋友做一個東西用到的 code 。

      因為很久不做 Flash coding 了。所以也就很少關心 Flash 8 的新的 Class。但聽大家說過有這個功能。本想從網上找段教程或 code 來做。可是發現國內還沒有類似的。就只能自己動手豐衣足食了。

      開始做法:

      第一步:在庫中建立一個視頻元件,類型選擇:視頻(受 ActionScript 控制)。
      第二步:將視頻元件拖到場景中,并調整尺寸到想要的大小。并起名為“my_video”
      第三步:在時間軸中粘入下邊的 code。

      var my_video:Video;
      my_video._x=100;
      my_video._y=40;
      var my_cam:Camera = Camera.get();
      my_cam.setMode(180, 140, 10, true);
      my_video.attachVideo(my_cam);
      shutter.onRelease = function() {
      myBitmap = new flash.display.BitmapData(180, 240, true, 0);
      myBitmap.draw(my_video);
      var tempObj = _root.createEmptyMovieClip("photo", 100);
      tempObj._x = 300;
      tempObj._y = 40;
      tempObj.attachBitmap(myBitmap, 1, "always", true);
      };

      Testing 發現有問題,拍出來照片只有 160x120 的區域有圖像。并且圖像變形了。 :eek:

      什么地方出了問題呢?@#$%^&* (此處省略2小時 debug 時間……)

      最后發現 my_video 復制到場景中調整大小時并不是改變 my_video.width 及 my_video.height 屬性,而是改變 my_video._width 及 my_video._height 屬性。原有視頻元件的尺寸只有 160x120 。這就相當于將 my_video 作了形變。而 BitmapData.draw() 是不會考慮源元件的形變的。用官方的說法是:

      QUOTE:

      源 MovieClip 對象不對此調用使用其任何舞臺中轉換。該源 MovieClip 對象會被視為存在于庫或文件中,沒有矩陣轉換、沒有顏色轉換,也沒有混合模式。假如您希望通過使用影片剪輯自身的 transform 屬性來繪制影片剪輯,則可以使用它的 Transform 對象來傳遞各種 transformation 屬性。
      我開始沒注重他給出的解決辦法。我想既然 draw() 不考慮源元件的形變,那只能自己在輸出的照片元件上想辦法做形變了。于是有了這段 code。

      var my_video:Video;
      my_video._x=100;
      my_video._y=40;
      var my_cam:Camera = Camera.get();
      my_cam.setMode(180, 140, 10, true);
      my_video.attachVideo(my_cam);
      shutter.onRelease = function() {
      myBitmap = new flash.display.BitmapData(160, 120, true, 0);
      myBitmap.draw(my_video);
      var tempObj = _root.createEmptyMovieClip("photo", 100);
      tempObj._x = 300;
      tempObj._y = 40;
      tempObj._width= 180;
      tempObj._height = 240;
      tempObj.attachBitmap(myBitmap, 1, "always", true);
      };

      這下照片是想要的大小了,而且圖像也沒有了變形。但發現圖像沒有攝像頭顯示的清楚。
      想了一下,那是當然,draw() 不考慮源元件的形變,draw時my_video 被當作 160x120 來draw了。 :mad:
      那能不能通過改變 my_video.width 及 my_video.height 屬性來改變 my_video 的尺寸而不是將 my_video 作形變呢?不能!!!my_video.width 及 my_video.height 屬性是只讀屬性。

      解決方法:

      第一步:用視頻編輯軟件制作一個 180x240 尺寸的1貞的白色 mov 視頻文件。
      第二步:用 Macromedia Flash 8 Video Encoder 將mov視頻文件轉為 flv 視頻文件。
      第三步:在庫中建立一個視頻元件,類型選擇:嵌入(與時間軸同步)。
      第四步:將視頻元件拖到場景中,并起名為“my_video”
          Testing 發現 my_video.width 及 my_video.height 屬性為 180x120 。阿哈 :cool:
      第五步:在時間軸中粘入下邊的 code 。

      var my_video:Video;
      my_video.clear()
      my_video._x=100;
      my_video._y=40;
      var my_cam:Camera = Camera.get();
      my_cam.setMode(180, 140, 10, true);
      my_video.attachVideo(my_cam);
      shutter.onRelease = function() {
      myBitmap = new flash.display.BitmapData(160, 120, true, 0);
      myBitmap.draw(my_video);
      var tempObj = _root.createEmptyMovieClip("photo", 100);
      tempObj._x = 300;
      tempObj._y = 40;
      tempObj._width= 180;
      tempObj._height = 240;
      tempObj.attachBitmap(myBitmap, 1, "always", true);
      };

      好了,現在所有問題都解決了。 ;)

      分享:Flash教程:四步制作的登錄閃吧窗口
      [前言]:初學者寫的教程供初學者使用,讓我們一起成為高手吧!寫本教程得到了閃吧成員”討厭大師“的幫助,在此表示感謝![要求]:1、打開文件,光標自動出現

      來源:經典論壇//所屬分類:Flash教程/更新時間:2008-03-05
      相關Flash教程