« FlashPlayer10 テキストファイルを開く、保存する | トップページ | 週末は箱根へ行こう。(アルファ版) »

2008年5月27日 (火)

FlashPlayer10 ローカルの画像を読み込み→カスタムフィルタ→別名保存

今度はローカルの画像を読み込んでみます。
読み込むまではテキストファイルの時と一緒。
違うのは読み込んだ後、Loader.loadBytes()でByteArrayから読み込まないといけないってことです。
そのLoaderインスタンスをaddChildしてあげればOKです。

これだけだとあれなので、PixelBenderで作成したカスタムフィルタをかけてみます。
前に作ったセピア色に変換するやつです。

カスタムフィルタをかけるのは前と変わらず。
まず読み込んだ画像と同じ大きさのBitmapDataを作成しておきます。
それにdrawしてapplyFilterでフィルタをかけます。

ここで注意。
こちらにも書かれてますが、loadBytesで読み込んだ直後はwidth、heightを取得できません。
Loader.contentLoaderInfoでEvent.INITが呼ばれた後は取得できるようです。

次に保存ですが、このままだと保存できません。
JPGEncoder」を使ってBitmapDataをByteArrayに変換してあげます。
それをFileReferenceのsave()に渡してあげればOKです。
やっぱり存在しているファイルに上書きするとIOErrorになるけど。。

package  {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.net.FileReference;
	import flash.events.*;
	import flash.display.Shader;
	import flash.filters.ShaderFilter;
	import flash.geom.Point;
	import flash.utils.ByteArray;
	import com.adobe.images.JPGEncoder;
	
	public class Main extends Sprite {
		[Embed(source = "test03.pbj", mimeType = "application/octet-stream")]
		private var shaderData:Class;
		private var ld:Loader;
		public function Main() {
			//読み込みボタン
			var bd1:BitmapData = new BitmapData(120, 60, false, 0xFF6600);
			var bm1:Bitmap = new Bitmap(bd1);
			var mc1:Sprite = new Sprite();
			mc1.addChild(bm1);
			mc1.x = 20;
			mc1.y = 20;
			addChild(mc1);
			mc1.buttonMode = true;
			mc1.addEventListener(MouseEvent.CLICK, selectFile);			
		}
		private function selectFile(e:MouseEvent):void {
			//読み込むファイルの選択
			var ff:FileReference = new FileReference();
			ff.addEventListener(Event.SELECT, loadFile);
			ff.browse();
		}
		private function loadFile(e:Event):void {
			//ファイル読み込み
			var ff:FileReference = FileReference(e.target);
			ff.addEventListener(Event.OPEN, function(e:Event):void { trace("open");  } );
			ff.addEventListener(ProgressEvent.PROGRESS, function(e:ProgressEvent):void { trace("progress");  } );
			ff.addEventListener(Event.COMPLETE, setImage );
			ff.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent):void { trace("ioError");  } );
			ff.load();
		}
		private function setImage(e:Event):void {
			//ByteArrayに読み込まれたデータをLoaderで読み込み
			ld = new Loader();
			ld.loadBytes(e.target.data);
			addChild(ld);	//読み込んだ画像を表示
			ld.contentLoaderInfo.addEventListener(Event.INIT,initImage);
		}
		private function initImage(e:Event):void {
			//読み込んだ画像にカスタムフィルタ(セピア)をかける
			var shader:Shader = new Shader(ByteArray(new shaderData()));
			var shaderFilter:ShaderFilter = new ShaderFilter(shader);

			var bd:BitmapData = new BitmapData(ld.width, ld.height);
			var bm:Bitmap = new Bitmap(bd);
			bm.x = ld.width;
			bd.draw(ld);
			bd.applyFilter(bd, bd.rect, new Point(), shaderFilter);
			addChild(bm);	//カスタムフィルタをかけた画像を表示
			
			//JPGEncoderでBitmapDataをByteArrayに変換
			var jpgEncoder:JPGEncoder = new JPGEncoder(85);
			var jpgStream:ByteArray = jpgEncoder.encode(bd);
			saveImage(jpgStream);
		}
		private function saveImage(ba:ByteArray):void {
			//保存
			var ff:FileReference = new FileReference();
			ff.addEventListener(Event.OPEN, function(e:Event):void { trace("open");  } );
			ff.addEventListener(ProgressEvent.PROGRESS, function(e:ProgressEvent):void { trace("progress");  } );
			ff.addEventListener(Event.COMPLETE, function(e:Event):void { trace("complete");  } );
			ff.addEventListener(Event.CANCEL, function(e:Event):void { trace("cancel");  } );
			ff.addEventListener(Event.SELECT, function(e:Event):void { trace("select");  } );
			ff.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent):void { trace("ioError");  } );
			ff.save(ba,"newImage.jpg");
		}
	}
	
}

|

« FlashPlayer10 テキストファイルを開く、保存する | トップページ | 週末は箱根へ行こう。(アルファ版) »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/183790/21219677

この記事へのトラックバック一覧です: FlashPlayer10 ローカルの画像を読み込み→カスタムフィルタ→別名保存:

» [FlashPlayer10]Flash Player 10自体のバグ・10が原因の不具合 [blog Boreal Kiss]
自分でもはまった、Flash Player 10に関係するものでフォーラムなどでも挙げられているもの。個人的にはwordpressのアップローダーが機能しないのが痛すぎる。9と10って共存できるんだろうか... [続きを読む]

受信: 2008年6月15日 (日) 15時08分

» Recent Links Tagged With Flashplayer10 [JabberTags - Find New Sites and Explore the Internet]
Bookmarked your site as flashplayer10 at JabberTags! [続きを読む]

受信: 2008年9月22日 (月) 20時49分

« FlashPlayer10 テキストファイルを開く、保存する | トップページ | 週末は箱根へ行こう。(アルファ版) »