Adobe AIR プログラミング講座

 

CameraUI クラスについて

 


■CameraUI クラスについて


CameraUI クラスは、モバイルアプリケーションで利用します。
 
CameraUI クラスを使用すると、カメラ用のアプリケーションを起動することができます。
 
ユーザーがリアルタイムで撮影した画像や動画を、Adobe AIR 上で使用することができます。
 
 

■ CameraUI 機能をサポートしているか調べる


CameraUI 機能をサポートしているか調べるには、CameraUI.isSupported プロパティを使用します。
 
true であれば、利用可能です。
 
「画像選択ダイアログを表示する機能」が利用可能か調べる

import flash.media.CameraUI;
import flash.text.TextField;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);

text_field.text = "CameraUI 機能が利用可能:" + CameraUI.isSupported;
 

■CameraUI クラスをインスタンス化する


new 演算子を使って、CameraUI クラスをインスタンス化します。
 
CameraUI オブジェクトを作成する

import flash.media.CameraUI;

// CameraUI オブジェクトを作成
var camera_ui:CameraUI = new CameraUI();

// 出力テスト
trace(camera_ui);
 
 

 

カメラアプリを使って撮影する

 


■カメラ用アプリケーションを起動する

 
カメラ用アプリケーションを起動するには、launch() メソッドを使用します。
 
このメソッドは非同期実行です。
 
カメラ用アプリケーションが動作している時でもプログラムが動き続けるので、必ずイベントから実行結果を得る必要があります。
 
CameraUI.launch ( タイプ ) :void
第01引数(略可)Stringカメラで撮影する種類を MediaType.* 型で指定
戻り値 voidなし
 
■第01引数 (撮影タイプ)
 
撮影タイプには、以下の種類があります。
 
定数文字列説明
MediaType.IMAGE"image"写真の撮影(画像を取得)
MediaType.VIDEO"video"ビデオの撮影(動画を取得)
 
■使用例
 
使用例です。
 
カメラ用アプリを起動する

import flash.media.CameraUI;
import flash.media.MediaType;
import flash.events.MouseEvent;

// CameraUI 機能に対応している
if(CameraUI.isSupported){

	// CameraUI オブジェクトを作成
	var camera_ui:CameraUI = new CameraUI();

	// マウスの左ボタンをクリックすると実行されるイベント
	stage.addEventListener(MouseEvent.MOUSE_DOWN,function (e:MouseEvent):void{

		// カメラ用アプリを起動する
		camera_ui.launch(MediaType.IMAGE);

	});

}
 

■launch() メソッド関連のイベントについて


■撮影が完了したか調べる
 
撮影が完了したか調べるには、MediaEvent.COMPLETE イベントを使用します。
 
引数から得られる MediaEvent オブジェクトの data プロパティから、MediaPromise オブジェクトを取得できます。
 
MediaPromise オブジェクトの file プロパティから、File オブジェクトを取得できます。
 
取得できない場合は、null となります。
 
■ユーザーが撮影をキャンセルしたか調べる
 
ユーザーが撮影をキャンセルしたか調べるには、Event.CANCEL イベントを使用します。
 
■エラーが発生したか調べる
 
エラーが発生したか調べるには、ErrorEvent.ERROR イベントを使用します。
 
引数から得られる ErrorEvent オブジェクトの errorID プロパティから、エラーの原因を意味する番号が取得できます。
 
ユーザーが撮影したデータは、必ずしもアクセスできるとは限りません。
 
ErrorEvent.ERROR イベントを使用して、エラーが発生したか確認する必要があります。
 
■使用例
 
カメラ用アプリ関連のイベント

import flash.text.TextField;
import flash.media.CameraUI;
import flash.media.MediaType;
import flash.media.MediaPromise;
import flash.filesystem.File;
import flash.events.Event;
import flash.events.MediaEvent;
import flash.events.MouseEvent;
import flash.events.ErrorEvent;

// CameraUI 機能に対応している
if(CameraUI.isSupported){

	// ------------------------------------------------------------
	// テキストフィールド
	// ------------------------------------------------------------
	// テキストフィールドを作成
	var text_field:TextField = new TextField();
	text_field.x = 10;
	text_field.y = 10;
	text_field.width = stage.stageWidth - 20;
	text_field.height = stage.stageHeight - 20;
	text_field.border = true;
	stage.addChild(text_field);


	// ------------------------------------------------------------
	// CameraUI オブジェクト
	// ------------------------------------------------------------
	// カメラロールオブジェクトを作成
	var camera_ui:CameraUI = new CameraUI();

	// 撮影が完了すると実行されるイベント
	camera_ui.addEventListener(MediaEvent.COMPLETE,function (e:MediaEvent):void{
		text_field.text = "撮影が完了した" + "\n" + text_field.text;

		// MediaPromise オブジェクトを取得
		var media_promise:MediaPromise = e.data;

		// ファイルオブジェクトを取得
		var file:File = media_promise.file;
		if(file){
			var str:String = "";
			str += "ファイル名 : " + file.name + "\n";
			str += "拡張子 : " + file.extension + "\n";
			str += "サイズ : " + file.size + "\n";
			str += "ファイル形式 : " + file.type + "\n";
			str += "作成日 : " + file.creationDate + "\n";
			str += "最終更新日 : " + file.modificationDate + "\n";
			str += "クリエータタイプ(Macintosh用) : " + file.creator + "\n";
			str += "ファイルのURLパス : " + file.url + "\n";
			str += "各OSでのファイルパス名称 : " + file.nativePath + "\n";
			str += "アイコン : " + file.icon + "\n";
			str += "ディレクトリか : " + file.isDirectory + "\n";
			str += "隠し属性か : " + file.isHidden + "\n";
			str += "アーカイブ属性か : " + file.isPackage + "\n";
			str += "ファイルが存在するか : " + file.exists + "\n";
			str += "ショートカットか : " + file.isSymbolicLink + "\n";
			text_field.text = str + text_field.text;
		}
	});

	// ユーザーが撮影をキャンセルすると実行されるイベント
	camera_ui.addEventListener(Event.CANCEL,function (e:Event):void{
		text_field.text = "撮影をキャンセルした" + "\n" + text_field.text;
	});

	// エラーが発生すると実行されるイベント
	camera_ui.addEventListener(ErrorEvent.ERROR,function (e:ErrorEvent):void{
		text_field.text = "エラーが発生した (id:" + e.errorID + ")\n" + text_field.text;
	});


	// ------------------------------------------------------------
	// マウスの左ボタンをクリックすると実行されるイベント
	// ------------------------------------------------------------
	stage.addEventListener(MouseEvent.MOUSE_DOWN,function (e:MouseEvent):void{

		// カメラ用アプリを起動する
		camera_ui.launch(MediaType.IMAGE);
	});

}
 

■ユーザーが撮影した画像を、ステージに表示する

 
ユーザーが撮影した画像を、ステージに表示するには、Loader クラスを使用します。
 
Loader オブジェクトに、MediaPromise オブジェクトを読み込むには、loadFilePromise() メソッドを使用します。
 
カメラ用アプリで撮影した画像をステージに表示する

import flash.text.TextField;
import flash.media.CameraUI;
import flash.media.MediaType;
import flash.media.MediaPromise;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.events.Event;
import flash.events.MediaEvent;
import flash.events.MouseEvent;
import flash.events.ErrorEvent;
import flash.events.IOErrorEvent;

// 100%表示
stage.scaleMode = StageScaleMode.NO_SCALE;
// 左上整列
stage.align = StageAlign.TOP_LEFT;

// CameraUI 機能に対応している
if(CameraUI.isSupported){

	// ------------------------------------------------------------
	// テキストフィールド
	// ------------------------------------------------------------
	// テキストフィールドを作成
	var text_field:TextField = new TextField();
	text_field.x = 10;
	text_field.y = stage.stageHeight - 200 - 10;
	text_field.width = stage.stageWidth - 20;
	text_field.height = 200;
	text_field.border = true;
	stage.addChild(text_field);


	// ------------------------------------------------------------
	// Loader オブジェクト
	// ------------------------------------------------------------
	// ローダーオブジェクトを作成
	var loader:Loader = new Loader();

	// LoaderInfo オブジェクトを取得
	var info:LoaderInfo = loader.contentLoaderInfo;

	// 読み込みが完了すると実行されるイベント
	info.addEventListener(Event.COMPLETE,function (e:Event):void{
		text_field.text = "読み込みが完了した (Loader)\n" + text_field.text;
	});

	// 入出力エラーが発生すると実行されるイベント
	info.addEventListener(IOErrorEvent.IO_ERROR,function (e:IOErrorEvent):void{
		text_field.text = "入出力エラーが発生した (Loader)\n" + text_field.text;
	});

	// ローダーオブジェクトをステージに配置
	stage.addChildAt(loader,0);


	// ------------------------------------------------------------
	// CameraUI オブジェクト
	// ------------------------------------------------------------
	// カメラロールオブジェクトを作成
	var camera_ui:CameraUI = new CameraUI();

	// 撮影が完了すると実行されるイベント
	camera_ui.addEventListener(MediaEvent.COMPLETE,function (e:MediaEvent):void{

		// MediaPromise オブジェクトを取得
		var media_promise:MediaPromise = e.data;

		// MediaPromise オブジェクトの読み込みを開始する
		loader.loadFilePromise(media_promise);
	});

	// エラーが発生すると実行されるイベント
	camera_ui.addEventListener(ErrorEvent.ERROR,function (e:ErrorEvent):void{
		text_field.text = "エラーが発生した (CameraUI) (id:" + e.errorID + ")\n" + text_field.text;
	});


	// ------------------------------------------------------------
	// マウスの左ボタンをクリックすると実行されるイベント
	// ------------------------------------------------------------
	stage.addEventListener(MouseEvent.MOUSE_DOWN,function (e:MouseEvent):void{

		// カメラ用アプリを起動する
		camera_ui.launch(MediaType.IMAGE);
	});

}