
AS3にはBitmap.smoothingというプロパティがあるので、これをtrueにするだけで読み込んだビットマップに対してスムージングを適用することが可能。AS2は意外とめんどくさい。
Loader.contentLoaderInfoのEvent.COMPLETEイベントで、Loaderインスタンスの中身(.content)をBitmap()でBitmapインスタンス化して、それに対してsmoothing = true。
実例だと以下みたいな感じですね。
まず、下記のコードをSmoothingBitmapLoader.asという名前で保存してください。
package {
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class SmoothingBitmapLoader extends Sprite {
public static const INIT = "initLoad";
private var imgbase;
private var imgLoader;
public function SmoothingBitmapLoader(url){
imgbase = new Sprite();
imgLoader = new Loader();
imgLoader.load(new URLRequest(url));
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
addChild(imgbase);
}
private function onCompleteHandler(e:Event){
imgbase.addChild(imgLoader);
var bmp = Bitmap(imgLoader.content);
bmp.smoothing = true;
dispatchEvent(new Event(INIT));
}
}
}
次に、Flashの1フレーム目に下記のコードを記述してください。.flaファイルの保存場所はasファイルと同ディレクトリで。
var a = new SmoothingBitmapLoader("test.jpg"); // exsample
a.addEventListener(SmoothingBitmapLoader.INIT, onInit);
function onInit(e){
addChild(a);
trace("init");
}
"test.jpg"を読みに行こうとするので、同ディレクトリになにか適当なjpgファイルを置いてみてください。
画像を読み込み、スムージングし、表示しています。
これをたとえば、rotationしても、scaleX、scaleYしても、あらまぁ、スムージングされてますね。いい感じです。
ただ、スムージングされているビットマップはご想像の通りマシン負荷が大きいので要注意です。
alphaなどの値をトゥイーンしてフェードインするみたいなトランジションで画像を出そうというならば、特に大きな画像の場合、アホみたいに負荷がかかるので、このトゥイーン中は、.smoothingをfalseにしておいて、トゥイーンが終わったらtrueにする、みたいなやり方がいいかと思います。
ただ、そのfalse/trueを変更する瞬間、スムージングがオフからオンになった時、画像が「カチっ」と変化するので、モーション的にどうかみたいな検討もした上で、ですが。


コメント (1)
takaです。
ご教授をお願い致します。
下記部分につきまして"test.jpg"を読込む仕様となっているとのことですが、XMLにより外部画像を読込んでいる場合は何を指定すればよいのでしょうか?
var a = new SmoothingBitmapLoader("test.jpg"); // exsample
a.addEventListener(SmoothingBitmapLoader.INIT, onInit);
function onInit(e){
addChild(a);
trace("init");
}
投稿者: taka | 2010年05月12日 20:49