プログラミング工房
TOP
Flex基本
開発環境 JavaScript連携 PHP連携1 PHP連携2(AMFPHP) ウィンドウ ボタンスキン 矩形スキン ローカルファイル(テキスト) F5等の対策 ローカルファイル(イメージ) ダウンロード、アップロード 1枚の画像のカラーを変更 時間のかかる計算処理 外部SWFの読込み
Flexで3D
Flexだけで3D Papervision3Dを使ってみる 3Dオブジェクト カメラ、前後判定の工夫しました 自由な形状を作成
Flexでクラス
Class1(白黒ゲームの盤) Class2(白黒ゲームのプレイヤー) Class3(プレイヤーを外部SWF)
PHP
共通関数1
Flexの作品
お問合せの説明 サンプルのソース表示の説明 分子構造の表示(PDBファイル) マンデルブロ集合の画像作成 swf参加型白黒ゲーム(Reversi) ストップウォッチ WEB素材
AIR
AIRを使ってみる ソースファイルのHTML変換を作る
etc.
マンデルブロ集合のギャラリー ジュリア集合のギャラリー wonderflを使ってみました お問合せ

Flex4基本-ローカルファイル(イメージ)

■2011.03.07:作成
サンプル サンプルのソース

ローカルファイル(イメージ)の読み書き

ローカルファイル(テキスト)で 「FileReference」を利用してローカルのテキストファイルの読み書きを行ったが、 今度はイメージ(JPG,PNG)ファイルの読み書きを行こないます。

また、サンプルには多少の作画機能がありますがここでは説明はしません。
(作画機能はイメージの書き込み試験用に適当に作りました。)

ローカルファイル(イメージ)の読み込み

fncLocalFileReadSyori、onFileSelected、onFileLoadErr関数は拡張子指定以外は
ローカルファイル(テキスト) とほぼ同じなので説明は省略します。

 onFileLoaded:ファイルの読み込み完了時の関数
  読み込みイメージを展開する領域(ladImage)を作成
  イメージ展開完了(onLoadComplete)と展開エラー(onLoadError)イベント関数を指定
  読み込みイメージをladImageに展開

 onLoadComplete:イメージ展開完了時の関数
  描画領域(uiGrf)の既存イメージの破棄
  展開したイメージ(ladImage)を描画領域(uiGrf)にセット
  作画機能用の領域(spAddImg)を描画領域(uiGrf)にセット

 onFileLoadErr:イメージ展開エラー時の関数
//ローカルファイルの読み込み
private function fncLocalFileReadSyori():void {
    // イベント登録
    filRef = new FileReference();
    filRef.addEventListener(Event.SELECT, onFileSelect);

    // ファイル選択ダイアログを表示...
    var imageTypes:FileFilter;
    if (cmbImgFormat.selectedItem.label == "PNG") {
        imageTypes = new FileFilter("PNGファイル(*.png)", "*.png");
    }
    else {
        imageTypes = new FileFilter("JPGファイル(*.jpg, *.jpeg)",
                                             "*.jpg; *.jpeg");
    }
    filRef.browse(new Array(imageTypes)); 
}
//読み込みイメージファイル選択
private function onFileSelect(e:Event):void {
    // イベントリスナー登録...
    filRef.addEventListener(Event.COMPLETE, onFileComplete);
    filRef.addEventListener(IOErrorEvent.IO_ERROR, onFileLoadErr);
    filRef.load();
}
//読み込み完了、イメージを展開
private function onFileComplete(e:Event):void {
    ladImage = new Loader;
    // イベント登録
    ladImage.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
    ladImage.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
                                         onLoadError);
    ladImage.loadBytes(filRef.data);
    strFileName = e.target.name;
    bolEditFlag = false;
    dispTitle();
}
private function onFileLoadErr(e:IOErrorEvent):void {
    Alert.show("ローカルファイルの読み込みに失敗しました。\n"+e.toString(),
                "LocalImage");
}
//イメージを展開完了
private function onLoadComplete(e:Event):void {
    // 既存イメージの破棄...
    while (uiGrf.numChildren) uiGrf.removeChildAt(0);
    // 画像データ参照...
    var LcBitmap:Bitmap = Bitmap(ladImage.content);
    uiGrf.addChild(LcBitmap);
    uiGrf.x = 0;
    uiGrf.y = 0;
    uiGrf.width = LcBitmap.width;
    uiGrf.height = LcBitmap.height;
    grpPreview.width = LcBitmap.width;
    grpPreview.height = LcBitmap.height;
    grpPreview.horizontalScrollPosition = 0;
    grpPreview.verticalScrollPosition = 0;
    //ペンで描画するクラスをセット
    spAddImg = new Sprite();
    uiGrf.addChild(spAddImg);
}
private function onLoadError(e:IOErrorEvent):void {
    Alert.show("画像の変換に失敗しました。", "LocalImage");
}

ローカルファイル(イメージ)への書き込み

ローカルファイル(イメージ)への書き込みは以下の手順で行います。
 fncLocalFileWrite:保存ボタン等で実行される関数
  描画領域(uiGrf)と同じサイズのBitmapDataを作成
   uiGrfは読み込んだイメージ(ladImage)と作画機能用の領域(spAddImg)
  描画領域(uiGrf)の内容をBitmapDataに書き込み
  BitmapDataをPNGまたはJPGでエンコードする。
   (バイナリのPNGまたはJPGファイルイメージが作成される)

これ以降のファイル出力部分はローカルファイル(テキスト) とほぼ同じなので説明は省略します。
//ローカルファイルへの保存----------------------------
private function fncLocalFileWrite():void {
    //描画データをセット
    var bmpData:BitmapData = new BitmapData(uiGrf.width, uiGrf.height);
    bmpData.draw(uiGrf);
     
    var byteArray:ByteArray;
    var strSaveName:String = strFileName;
    if (strSaveName == "") {
        strSaveName = "無題";
    }
    else {
        var i:int = strSaveName.lastIndexOf(".");
        if (i >= 0) {
            strSaveName = strSaveName.substr(0,i);
        }
    }
    if (cmbImgFormat.selectedItem.label == "PNG") {
        byteArray = new PNGEncoder().encode(bmpData);
        strSaveName += ".png";
    }
    else {
        byteArray = new JPEGEncoder().encode(bmpData);
        strSaveName += ".jpg";
    }
    filRef = new FileReference();
    filRef.addEventListener(Event.COMPLETE, onFileSave);
    filRef.addEventListener(IOErrorEvent.IO_ERROR, onFileSaveErr);
    filRef.save(byteArray,strSaveName);
}
//保存完了
private function onFileSave(e:Event):void {
    strFileName = e.target.name;
    bolEditFlag = false;
    dispTitle();
    Alert.show("ローカルファイルへ保存しました。", "LocalImage");

}
//保存エラー
private function onFileSaveErr(e:IOErrorEvent):void {
    Alert.show("ローカルファイルへの保存を失敗しました。\n"+e.toString(),
                "LocalImage");
}

イメージのクリップボードへのコピーは出来ないみたいです。

プログラミング工房