- 2009-04-21 (火) 0:32
- ActionScript2.0 | 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-ビットマップスムージングをスクリプトで制御したい
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.mousouchiku.net/blog/2009/04/21-003246.php/trackback
- Listed below are links to weblogs that reference
- [AS2]Flashで外部から読み込んだ画像データにスムージングを適用する from モウソウチク日記