許多朋友在做完Flash之後,都會需要截取畫面交差,但擷取畫面的過程複雜,還要開Photoshop處理真的很麻煩,於是最近利用ActionScript 3.0加上Flash Player 10的新功能做出快速抓畫面並儲存的功能。
寫在最前面,載入PNG編碼套件 [ActionScript 3.0 library for several basic utilities.]
import com.adobe.images.PNGEncoder;
然後新增按鍵事件
stage.addEventListener(KeyboardEvent.KEY_UP, _capture);
最後當然要新增按鍵處理function
function _capture(e:KeyboardEvent){
// 如果按下 CTRL + S
if(e.keyCode == 83 && e.ctrlKey){
var i:BitmapData = new BitmapData(stage.stageWidth,
stage.stageHeight);
i.draw(stage);
var b:ByteArray = PNGEncoder.encode(i);
var fr:FileReference = new FileReference();
// 檔案名稱預設會加上TIME字串,可以視情況修改
fr.save(b, "Filename-"
+ new Date().time.toString() + ".png");
}
}
把上面的程式碼:
i.draw(stage);
換成:
i.draw( [你想要截取的MovieClip] );
把上面的程式碼:
var i:BitmapData = new BitmapData(stage.stageWidth,
stage.stageHeight);
i.draw(stage);
換成:
var i:BitmapData = new BitmapData( [你要的寬度] ,
[你要的高度] );
var m:Matrix = new Matrix();
m.translate( [x移動距離] , [y移動距離] );
i.draw(stage, m);
其他關於 Matrix 的用法,可以參考 Flash 的說明文件,有難得的圖解喔!
當然這個方法有一些小問題。按下CTRL+S之後馬上就跳出的儲存視窗,在場景快速變化,或是手殘太早或是太晚按的時候,很容易出問題。
而且很多人都寫過了,所以下一個改版會新增一個有趣的功能~
當然可以,你要善用 draw 的第二個參數 Matrix,稍後會補上做法。
thanks a lot!!
您好,請問透過上述方法可擷取整個桌面的圖像嗎?感謝 ^_^
如果網頁裡面的Flash可以擷取你的桌面,那不是很恐怖嗎?
所以一般的Flash是沒有這個功能的,AIR程式才有的樣子。
Yes,目前有 AIR 的程式但須要擷取桌面功能,但又不想透過其他方式完成。PS: 因為 Action Script 不熟 !! 感謝版主熱心回應,謝謝 ^_^
可以用 Google 找一下 AIR capture screen 有兩種方法可以試試看。
請問能否指定擷取stage的某特定區塊呢?
draw(stage)這個方式會從(0,0)座標開始擷取整個stage
但假設如果只想要擷取如從 (100,100)起算,長600寬550的區域畫面該怎麼做呢?有找到類似這樣的用法var _bitmapData:BitmapData = new BitmapData(600, 550, false, 0xffffff);但是也只能指定擷取區域的長寬,對於起始點(100,100)還是無法解決,不知有沒有什麼解決方案呢?感謝~