Adobe AIR プログラミング講座

 

CameraRoll クラスについて

 


■CameraRoll クラスについて


CameraRoll クラスは、モバイルアプリケーションで利用します。
 
CameraRoll クラスを使用すると、写真フォルダに格納されている画像データにアクセスすることができます。
 
読み込みアクセス時は、画像選択ダイアログが表示されます。
 
 

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


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

import flash.media.CameraRoll;

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

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

 

画像選択ダイアログを表示する

 


■「画像選択ダイアログを表示する機能」をサポートしているか調べる


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

import flash.media.CameraRoll;
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 = "画像選択ダイアログを表示する機能が利用可能:" + CameraRoll.supportsBrowseForImage;
 

■画像選択ダイアログを表示する

 
画像選択ダイアログを表示するには、browseForImage() メソッドを使用します。
 
このメソッドは非同期実行です。
 
画像選択ダイアログが表示されている時でもプログラムが動き続けるので、必ずイベントから実行結果を得る必要があります。
 
CameraRoll.browseForImage ( オプション ) :void
第01引数(略可)CameraRollBrowseOptions画像選択ダイアログ生成時に必要なパラメータを指定(Adobe AIR3.0 以降)
戻り値 voidなし
 
■第01引数 (オプション)(Adobe AIR3.0 以降)
 
iOS 環境で実行する場合に使用します。
 
画像選択ダイアログ生成時に必要なパラメータを、CameraRollBrowseOptions オブジェクトに格納して指定します。
 
CameraRollBrowseOptions クラスには、以下のプロパティがあります。
 
プロパティ名説明
originRectangleCameraRoll イメージピッカーの基点となる矩形
widthNumberCameraRoll イメージピッカーの幅
altitudeNumberCameraRoll イメージピッカーの高さ
 
■使用例
 
使用例です。
 
画像選択ダイアログを表示する

import flash.media.CameraRoll;
import flash.events.MouseEvent;

// 「画像選択ダイアログを表示する機能」に対応している
if(CameraRoll.supportsBrowseForImage){

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

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

		// 画像選択ダイアログを表示する
		camera_roll.browseForImage();

	});

}
 
オプションを指定して、画像選択ダイアログを表示する

import flash.media.CameraRoll;
import flash.media.CameraRollBrowseOptions;
import flash.geom.Rectangle;
import flash.events.MouseEvent;

// 「画像選択ダイアログを表示する機能」に対応している
if(CameraRoll.supportsBrowseForImage){

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

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

	// 幅を指定
	browse_options.width = 600;
	// 高さを指定
	browse_options.height = 0;
	// 基点矩形を指定
	browse_options.origin = new Rectangle(0,0,0,0);

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

		// 画像選択ダイアログを表示する
		camera_roll.browseForImage(browse_options);

	});

}
 

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


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

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

// 「画像選択ダイアログを表示する機能」に対応している
if(CameraRoll.supportsBrowseForImage){

	// ------------------------------------------------------------
	// テキストフィールド
	// ------------------------------------------------------------
	// テキストフィールドを作成
	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);


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

	// ユーザーが画像を選択すると実行されるイベント
	camera_roll.addEventListener(MediaEvent.SELECT,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_roll.addEventListener(Event.CANCEL,function (e:Event):void{
		text_field.text = "画像の選択をキャンセルした" + "\n" + text_field.text;
	});

	// エラーが発生すると実行されるイベント
	camera_roll.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_roll.browseForImage();
	});

}
 

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

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

import flash.text.TextField;
import flash.media.CameraRoll;
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;

// 「画像選択ダイアログを表示する機能」に対応している
if(CameraRoll.supportsBrowseForImage){

	// ------------------------------------------------------------
	// テキストフィールド
	// ------------------------------------------------------------
	// テキストフィールドを作成
	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);


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

	// ユーザーが画像を選択すると実行されるイベント
	camera_roll.addEventListener(MediaEvent.SELECT,function (e:MediaEvent):void{

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

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

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


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

		// 画像選択ダイアログを表示する
		camera_roll.browseForImage();
	});

}
 
 

 

画像を写真フォルダに保存する

 


■「画像を写真フォルダに保存する機能」が利用可能か調べる


「画像を写真フォルダに保存する機能」が利用可能か調べるには、CameraRoll.supportsAddBitmapData プロパティを使用します。
 
true であれば、利用可能です。
 
「画像を写真フォルダに保存する機能」が利用可能か調べる

import flash.media.CameraRoll;
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 = "画像を写真フォルダに保存する機能が利用可能:" + CameraRoll.supportsAddBitmapData;
 

■ BitmapData を写真フォルダに保存する

 
BitmapData オブジェクトを、写真フォルダに保存するには、addBitmapData() メソッドを使用します。
 
ファイル名や属性などの情報を設定することはできません。
 
写真を新しく撮るように、最新の日付で写真フォルダに画像が追加されていきます。
 
CameraRoll.addBitmapData ( BitmapData ) :void
第01引数(略可)BitmapData保存したいビットマップを、BitmapData 型で指定
戻り値 voidなし
 
■使用例
 
使用例です。
 
適当なビットマップデータを写真フォルダに保存する

import flash.media.CameraRoll;
import flash.display.BitmapData;
import flash.events.MouseEvent;

// 「画像を写真フォルダに保存する機能」に対応している
if(CameraRoll.supportsAddBitmapData){

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

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

		// 適当なカラー
		var a:uint = 0xFF;
		var r:uint = Math.floor(Math.random() * 0xFF);
		var g:uint = Math.floor(Math.random() * 0xFF);
		var b:uint = Math.floor(Math.random() * 0xFF);
		var color32:uint = (a << 24) | (r << 16) | (g << 8) | (b << 0);

		// ビットマップデータを作成
		var bmp_data:BitmapData = new BitmapData(512,512,true,color32);

		// ビットマップデータを写真フォルダに保存
		camera_roll.addBitmapData(bmp_data);

		// ビットマップデータを破棄
		bmp_data.dispose();
		bmp_data = null;
	});

}
 

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


■保存が完了したか調べる
 
保存が完了したか調べるには、Event.COMPLETE イベントを使用します。
 
■エラーが発生したか調べる
 
エラーが発生したか調べるには、ErrorEvent.ERROR イベントを使用します。
 
引数から得られる ErrorEvent オブジェクトの errorID プロパティから、エラーの原因を意味する番号が取得できます。
 
■使用例
 
BitmapData を写真フォルダに保存する時のイベント

import flash.text.TextField;
import flash.media.CameraRoll;
import flash.display.BitmapData;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.ErrorEvent;

// 「画像を写真フォルダに保存する機能」に対応している
if(CameraRoll.supportsAddBitmapData){

	// ------------------------------------------------------------
	// テキストフィールド
	// ------------------------------------------------------------
	// テキストフィールドを作成
	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);


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

	// 画像の保存が完了すると実行されるイベント
	camera_roll.addEventListener(Event.COMPLETE,function (e:Event):void{
		text_field.text = "画像の保存が完了した" + "\n" + text_field.text;
	});

	// エラーが発生すると実行されるイベント
	camera_roll.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{

		// 適当なカラー
		var a:uint = 0xFF;
		var r:uint = Math.floor(Math.random() * 0xFF);
		var g:uint = Math.floor(Math.random() * 0xFF);
		var b:uint = Math.floor(Math.random() * 0xFF);
		var color32:uint = (a << 24) | (r << 16) | (g << 8) | (b << 0);

		// ビットマップデータを作成
		var bmp_data:BitmapData = new BitmapData(512,512,true,color32);

		// ビットマップデータを写真フォルダに保存
		camera_roll.addBitmapData(bmp_data);

		// ビットマップデータを破棄
		bmp_data.dispose();
		bmp_data = null;
	});

}