feb19.jp blog - life is creative!

AS2で読み込んだ外部画像にスムージングを適用する

ブックマークに追加する tags:   

AS2で外部から読み込んだBitmapにスムージングをかける

ちょっとめんどくさいかつ、忘れがちなので一応メモ。AS3は楽なんだけどねぇ。

というか、クラスにしました。image_mcに読み込んだBitmapDataをdrawして、ターゲットのムービークリップにスムージングをかけてアタッチする、という感じ。

LoadBitmap.as
	
import flash.display.BitmapData;
	
class LoadBitmap extends AsBroadcaster
{
	/*
	 * 外部のビットマップデータをロードします。
	 * 
	 * @param	target:MovieClip	ロードされたビットマップを表示するMovieClip
	 * @param	url:String	URL
	 * @param	smoothing:Boolean	スムージングするか否か
	 * 
	 * このインスタンスにaddListener(オブジェクト)すると、引数に指定したオブジェクトはonCompleteイベントを受け取ります。
	 */
	public function LoadBitmap(target:MovieClip, url:String, smoothing:Boolean)
	{
		var image_mc:MovieClip = target.createEmptyMovieClip("image_mc", target.getNextHighestDepth());
		var image_listener:Object = new Object();
		
		var _this:LoadBitmap = this;
		
		initialize(this);
		
		image_listener.onLoadInit = function(targetmc:MovieClip)
		{
			targetmc._visible = false;
			var bmd:BitmapData = new BitmapData(targetmc._width, targetmc._height, true, 0x000000);
			target.attachBitmap(bmd, target.getNextHighestDepth(), "auto", smoothing);
			bmd.draw(targetmc);
			
			_this.broadcastMessage("onComplete");
		}
		
		var loader:MovieClipLoader = new MovieClipLoader();
		loader.addListener(image_listener);
		loader.loadClip(url, image_mc);
	}
}

使い方はこんな感じ。

var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
var lbm:LoadBitmap = new LoadBitmap(mc, "test.jpg", true);
lbm.addListener(this);
function onComplete():Void
{
	mc._xscale = mc._yscale = 200;
}

LoadBitmapクラスは、AsBroadcasterを継承しているので、newで作ったインスタンスにaddListener()すると、引数に指定したオブジェクト(スコープ)でonCompleteイベントを受け取ることができるので、上の例では、読み込みが終わったらonCompleteを受け取って、mcを縦横2倍に拡大しています。

こういう書き方もAS2はできますよね。

var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
var lbm:LoadBitmap = new LoadBitmap(mc, "test.jpg", true);
var listener_obj:Object = new Object();
lbm.addListener(listener_obj);
listener_obj.onComplete = function()
{
	mc._xscale = mc._yscale = 200;
}

ちなみに、大きい画像にスムージングをかけてトランジションするとそこそこ重いので、トランジション中はMovieClip._quality = "LOW"とかにして、終わったら元に戻すとかすると、気が利いてるのかもしれませんね。

----

どうでもいいけど最近ニョロ括弧({})の書き方を、上述のコードのように一段改行するようになってきました。Adobeのコーディングガイドラインや、FlashDevelopの機能のせいでもあるのですが、この書き方の方が、文字や行が密集していないので、ディスプレイに顔を近づけなくてもコードが読みやすいですね。あと、できるだけAS2であってもちゃんと型指定をするっていうのと、変数名(とくに再利用される可能性のあるコード)はあまり省略しない、っていうのを心がけるようにしています。おかげでタイプする文字は多くなるのですが、あとから(たとえば数ヵ月後とかに)再度見たとき、コードが読みやすいですね。

2008年07月15日12:02

Webデザインブログ

「AS2で読み込んだ外部画像にスムージングを適用する」の関連エントリー

 iTunes Store(Japan)

コメントを投稿

トラックバック

このエントリーのトラックバックURL:
http://feb19.jp/mt/mt-tb.cgi/150

Navigation

古:AS2でTextFieldの行数を取得する
新:Flex SDK 3で、Flash Player 10(Astro)を予習する
トップページ

Recently Entries
Flash 上でパブリッシュしたとき、型宣言されていない変数・関数があったら警告を出す
Flex SDK (mxmlc)や Flex Builder とかで...
Flash Builder 4 Standard 導入
色々メモリリークチェックとか出来る Premium は必要になってか...
Mac でファイルの関連付けを変える(Mac で AIR アプリがアップデート出来ないを解決する方法)
ファイルを右クリックして「情報を見る」を選び、表示されたウィンドウの...
Mac OS X 10.6 Snow Leopard から入ってるフォント「Menlo」がコーディング作業にいい感じ
Xcode でコード書いているとき、Eclipse でコード書くより...
AIR で JSON 形式ファイルの入出力
AIR 祭り開催中。今回はファイル入出力。AS3 で扱っている Ob...
Adobe CS5 ティザーサイトオープン
カウントダウンが始まっています。いよいよ CS5 ですね。globa...
AIR でファイルがドラッグアンドドロップされたことを NativeDragEvent で検知する
最近また AIR が楽しい気がして触っているのですが、 Google...
iPhone アプリ "iBeat - BPM Counter" を発売しました & iPhone インタラクションデザインについて
BPM 計測アプリです。既に似たようなアプリはいくつか発売されている...
AS3 の演算子 ||= について
AS3 だけでつかえるものではないのですが、AS3 での動作を確認し...
iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する
Objective-C では、高位のフレームワークで、低位のフレーム...