2010年7月12日 星期一

AS3 - 用Webcam來照相

這個技巧很簡單,主要有三樣東西
1. Camera: 這個代表的就是某個Webcam元件。
2. VideoDisplay: 這個control可以attach一個Camera。也就是讓Camera的資料顯示在上面。
2. BitmapData: 這個Class可以用來包含我們截圖下來的bitmap data.

當capture動作開始時,我們只要先產生一個BitmapData,並且用draw這個方法去把VideoDisplay裡面的Camera資料畫在BitmapData就好了。有了BitmapData後,我們用Bitmap把它包起來就可以放到讓何一個container裡面了。

注意的是因為Bitmap並不屬於IUIComponent,所以我們要加他的話,必須要用rawChildren才可以加進它唷,這邊注意一下。

下面是程式碼

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="800" minHeight="600">
<fx:Script>
<![CDATA[
import mx.controls.Alert;

private function videoDisplay_creationComplete():void {
var camera:Camera = Camera.getCamera();
if (camera) {
videoDisplay.attachCamera(camera);
} else {
Alert.show("You don't seem to have a camera.");
}
}

private function capture(): void {
var bitmapData:BitmapData = new BitmapData(320, 240);
bitmapData.draw(videoDisplay);
var bitmap:Bitmap = new Bitmap(bitmapData);
while(panel.rawChildren.numChildren > 0)
{
panel.rawChildren.removeChildAt(0);
}
panel.rawChildren.addChild(bitmap);
}

]]>
</fx:Script>

<mx:VideoDisplay id="videoDisplay"
creationComplete="videoDisplay_creationComplete();"
width="320"
height="240" />

<mx:Panel id="panel" width="320" height="240" x="340" y="0" title="Hello"/>
<s:Button x="10" y="248" click="capture()"/>
</s:Application>

沒有留言:

張貼留言