そもそもBitmap.smoothingとは、Bitmapの表示サイズが変化したとき(width、height、scaleX、scaleYなどが変化したとき)発生するジャギーを軽減するための処理「アンチエイリアス」を有効にするかどうかのブール値です。
このプロパティはデフォルトではfalse(アンチエイリアスをかけない設定)になっています。これは、アンチエイリアスにかかる描画コストを抑えるためにそのようになっています。(つまりこれをやりすぎると動きがカクカクになってしまいます。)
Bitmap.smoothingの値は、Bitmap.bitmapDataが更新されたとき自動的にfalseに変わります。つまり、はじめにtrueにしたつもりでも後でfalseに変わってしまうことがあるので注意が必要です。BitmapDataがどこかのタイミングで変わることがある場合、smoothingプロパティを変更するタイミングは常に意識する必要があります。
var bitmap:Bitmap = new Bitmap();
bitmap.smoothing = true;//bitmapDataがセットされる前に設定しているので、無意味な指定
stage.addChild(bitmap);
var loader:Loader = new Loader();
loader.load("image.jpg");
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(event:Event):void
{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, arguments.cally);
bitmap.bitmapData = Bitmap(loader.content).bitmapData;//この瞬間、bitmap.smoothingはfalseに変わる
});
とここで、smoothingの値はtrueなのになぜかアンチエイリアスが効かないということで困ったことはありませんか?一番ありがちなのが(というか私自身ハマってしまったことですが)、大きい画像を縮小表示したときなどです。
この場合、Stage.qualityの値をStageQuality.BESTに設定する必要があります。デフォルトではStageQuality.HIGHになっているので、明示的に最高品質までクオリティを高くすることで意図した結果がでるようになります。
stage.quality = StageQuality.BEST;
コメントする