feb19.jp

Nobuhiro Takahashi
Designer / Engineer

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

Papervision3D 2.0 GreatWhiteで空間に浮かぶカード100枚

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を変更する瞬間、スムージングがオフからオンになった時、画像が「カチっ」と変化するので、モーション的にどうかみたいな検討もした上で、ですが。

Tweet Share Bookmark

Navigation

prev: Papervision3D 2.0 GreatWhiteで空間に浮かぶカード100枚
next: 広松木工の7段チェスト&トレイ - SONO Chest Tray 028

Recently Entries