AIR Beta1でWEBCAMの画像をjpgに保存するサンプル作った

| | コメント(0) | トラックバック(0)

AIRのFlash CS3用のAIR書き出しエクステンションのβ1版が公開されたのでいじってみた。
(注意!!:2007/10/09現在はβ2になっていますが、ここで配布されているAirアプリはβ2では実行できません。ソース自体はたぶん流用できます。 無理でしたBata2対応版はこちら)

hatayanlog: Apollo まとめの記事の時から我慢していたAIR(元Apollo)のプログラミングを修了したので遂にやってみた。

作ったのはWEBCAMの画像から静止画を保存して、jpgファイルに書き出すサンプル。
as3corelibのcom.adobe.images.JPGEncoderとAIRのファイルシステムのクラスを使って実装。

サンプルファイル AIRCamera

こんな感じの画面です

AirCamera

実際に保存した画像

test

Flaファイルに直接書いているAS3のソースコード


/*
写真を撮るとディスクトップにhoge.jpgが保存されるSample
  flashCS3 +  AIR
  flashplayer9
  Create Date: 2007/09/29
  Author: Hirotaka Hatayama
  WebSite: http://www.hatayan.org
*/

/*air class*/
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;

/*adobe core class*/
import com.adobe.images.JPGEncoder;

/*クラスファイル*/
var video:Video;
var photo_bm:Bitmap;
var photo_bd:BitmapData;
var fileName:String;

/*コンストラクタ*/
/*ステージのスケール方法を設定*/
//No_SCALEモード
stage.scaleMode=StageScaleMode.NO_SCALE;
/*ステージの揃えの決定*/
//左に合わせる
stage.align=StageAlign.TOP_LEFT;
//ボタンの設定
setShotBtn();
setSaveBtn();
//webcamの設定
initCamera();
//photoの設定
initPhoto();

function myTrace(param:Object):void {
myTrace_textArea.text=param+"\n"+myTrace_textArea.text;
}

//-----------------------------------------------------------------//
//webcamの設定
//-----------------------------------------------------------------//
function initCamera():void {
/*接続されたWEBCAMの処理*/
//接続されたWEBCAMをcameraに関連付ける
var camera:Camera=Camera.getCamera();
//きちんとカメラが接続されていたら
if (camera != null) {
//WEBCAMの解像度とFPSを設定
camera.setMode(320,240,30,true);
//videoオブジェクトをカメラのサイズに合わせて初期化
video=new Video(camera.width,camera.height);
//カメラをvideoオブジェクトに関連付ける
video.attachCamera(camera);
//addChildでステージにvideoを配置
addChild(video);
video.x=0;
} else {
//カメラがないときのエラー表示
myTrace("カメラを接続してください。");
}
}
//-----------------------------------------------------------------//
//右側の画面の設定
//-----------------------------------------------------------------//
function initPhoto() {
photo_bd = new BitmapData(320, 240, false, 0x00CCCCCC);
photo_bm = new Bitmap(photo_bd);
photo_bm.x = 320;
photo_bm.y = 0;
addChild(photo_bm);
}
//-----------------------------------------------------------------//
//ShotBtnの設定
//-----------------------------------------------------------------//
function setShotBtn():void {
btnShot.addEventListener(MouseEvent.CLICK, shot);
}
function shot(event:Event):void {
photo_bd.draw(video);
}
//-----------------------------------------------------------------//
//SaveBtnの設定
//-----------------------------------------------------------------//
function setSaveBtn():void {
btnSave.addEventListener(MouseEvent.CLICK, save);
}
function save(event:Event):void {
btnSave.enabled = false;
var jpgEncoder:JPGEncoder = new JPGEncoder(80);
var byteArr:ByteArray = jpgEncoder.encode(photo_bd);
myTrace(saveToJpegFile("test.jpg",byteArr));
btnSave.enabled = true;
}
function saveToJpegFile(fileName:String,byteArr:ByteArray):String {
var str:String;
try {
var f:File = File.desktopDirectory;
f = f.resolve(fileName);
var fs:FileStream = new FileStream();
fs.open(f,FileMode.UPDATE);
fs.writeBytes(byteArr, 0, byteArr.length);
fs.close();
str="photo saved";
} catch (e:Error) {
str=e.message;
}
return str;
}

ソースのダウンロード

トラックバック(0)

このブログ記事を参照しているブログ一覧: AIR Beta1でWEBCAMの画像をjpgに保存するサンプル作った

このブログ記事に対するトラックバックURL: http://www.hatayan.org/mt/mt-tb.cgi/545

コメントする

このブログ記事について

このページは、hatayanが2007年9月29日 12:26に書いたブログ記事です。

ひとつ前のブログ記事は「無事修了」です。

次のブログ記事は「台湾旅行」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01