タグ別アーカイブ: AS2

[AS2]Flashで外部から読み込んだ画像データにスムージングを適用する

Flashで外部から画像データを読み込んで、リサイズしたり回転させたりして使用する場合、シャギーが出てギザギザが目立ってしまう。Flash Player7だと、何もしなくてもスムージングがかかった状態で表示されていたみたいで、問題なかったのだけど、8以上だとギザギザになってしまう。いろいろ調べてみたら、Flash Player8から仕様が変更になったらしく、ひと手間かけないとスムージングが適用できない模様。よく使いそうなのでメモ。

flaファイルと同じ階層に「photo.jpg」を用意して、メインのタイムラインの1フレーム目に、下記スクリプトを記述すれば、外部画像にスムージングを適用可能(AS2です)。

import flash.display.BitmapData;

this.createEmptyMovieClip("containerOriginal", this.getNextHighestDepth());
this.createEmptyMovieClip("containerSmoothing", this.getNextHighestDepth());

var listenerObj:Object = new Object();
listenerObj.onLoadInit = function(){
	bitmapSmoothing();
}
var mcl:MovieClipLoader = new MovieClipLoader();
mcl.addListener(listenerObj);
mcl.loadClip("photo.jpg", this.containerOriginal);

function bitmapSmoothing() {
	var smoothImage:BitmapData = new BitmapData(this.containerOriginal._width, this.containerOriginal._height, true, 0x000000);
	smoothImage.draw(this.containerOriginal);
	this.containerSmoothing.attachBitmap(smoothImage, 0, "auto", true);
	this.containerOriginal.removeMovieClip();
}

画像を読み込んで、読み込みが完了したら、BitmapDataに変換してスムージングを適用して元画像をリムーブという流れ。元画像の読み込みが完全に完了してから、スムージング処理をしないと、うまく動作しないみたいなので注意。このスクリプトの場合、onLoadInitでロード完了を取得して、bitmapSmoothing関数でスムージングを適用してます。

元画像をリムーブしないで、角度をつけて比較してみるとこんな感じ(左がスムージング適用前で、右がスムージング適用後)。

ライブラリから読み込む場合は、プロパティからスムージングの適用を選択できるので問題はないけど、スクリプトベースで外部から引っ張ってくる場合は、こんな感じで解決するみたいです。もっと簡単な方法とかあるのかもしれないけど、とりあえずこの方法で解決しました。

【参考にさせて頂いたサイト】
AS2で読み込んだ外部画像にスムージングを適用する
FLASH8-ビットマップスムージングをスクリプトで制御したい