[Adobe Air] 保存ダイアログで拡張子.pngだけ許可したい
June 16, 2009

やりたいこと
PNGEncoderを使って、ユーザーが画像ファイル(.png)を保存できるようにする。
画像ファイルの保存先、ファイル名をユーザーが決められるようにする。
課題
保存ダイアログでユーザーがファイル名を決める際、.png以外の拡張子にしてしまう可能性がある。
browseForOpen()メソッド(ファイル選択ダイアログ)では、選択可能な拡張子をフィルタできるけれど、browseForSave()メソッドにそのようなものはない。
対処
拡張子が未指定、または拡張子.png以外のとき、.pngを末尾につける。強引だけど。
参考URL
Set File Extension with Adobe Air? - kirupaForum
ソース
保存ダイアログを出すには、browseForSave()メソッドを使用。
_file = new File();
_file = File.desktopDirectory;// 保存ダイアログでデスクトップをデフォルトに
_file.browseForSave("ファイル保存");// 保存ダイアログを表示
_file.addEventListener(Event.SELECT,saveHandler);saveHandlerで出力画像の生成、拡張子のチェック、保存処理。
private function saveHandler(e:Event):void{
// 画像データ生成
var bmp:BitmapData = new BitmapData(_w,_h);
bmp.draw(exportImg);
var bytes:ByteArray = PNGEncoder.encode(bmp);
// 拡張子なし、または.png以外のとき
if(!e.target.extension || e.target.extension != "png"){
e.target.nativePath += ".png";// 拡張子.png追加
}
// 保存処理
_stream = new FileStream();
_stream.open(_file, FileMode.WRITE);
_stream.writeBytes(bytes,0,bytes.length);
_stream.close();
}この方法だと、ユーザーが.png以外をファイル名にしていたとき、example.txt.pngのようになるので、.png以外の拡張子を消してから追加した方がスマート。
正規表現使えばいいんだろうね。
カテゴリー:
Trackback
Trackback URL for this entry:

















