In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: BitmapDataの大きさを、指定の枠の大きさに合わせるサンプル

元画像のアスペクト比を無視して 300 * 300 に表示させるのではなく、
* アスペクト比を変えずに、縦横のうち大きい方の値が 300 ピクセルを超えないよう拡大縮小するなら、
* BitmapData.draw() の第2引数 matrix を使った方が簡単ではないかと思い、fork してみました。
Get Adobe Flash player
by Aquioux 07 Mar 2010
// forked from Hiiragi's BitmapDataの大きさを、指定の枠の大きさに合わせるサンプル
/*
 * 元画像のアスペクト比を無視して 300 * 300 に表示させるのではなく、
 * アスペクト比を変えずに、縦横のうち大きい方の値が 300 ピクセルを超えないよう拡大縮小するなら、
 * BitmapData.draw() の第2引数 matrix を使った方が簡単ではないかと思い、fork してみました。
 */
package 
{
	import flash.display.*;
	import flash.events.*;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.net.FileReference;
	
	import com.bit101.components.PushButton;
	import com.bit101.components.Text;
	
	/**
	 * BitmapDataの大きさを、指定の枠の大きさに合わせるサンプル
	 * 
	 * この場合は300*300の枠に合わせて拡大・縮小します。
	 * loadImageボタンを押して、いろんな大きさの画像ファイルを読み込んでみてください。
	 * 
	 * ただし、全体のピクセルが16,777,216ピクセル以下の画像に限ります。
	 * これより大きくなるとエラーが出ます。多分。
	 * 
	 * drawTrianglesとかは今後の投稿の布石です。多分。
	 * 
	 * @author Hiiragi
	 */
	[SWF(width = 465, height = 465, frameRate = 30, backgroundColor = 0)]
	public class Main extends Sprite 
	{
		private var _scenes:Vector.<Sprite>;
		
		private var _fr:FileReference;
		private var _loader:Loader;
		
		private var _enemyImage:BitmapData;
		private var _enemyBitmap:Bitmap;
		private var _enemyImageMax:int = 300;

		private var textComp:Text;
		
		
		public function Main():void 
		{
			_fr = new FileReference();
			_loader = new Loader();
			
			_fr.addEventListener(Event.SELECT, fileSelectedHandler);
			
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			//枠
			var frame:Sprite = new Sprite();
			frame.graphics.lineStyle(2, 0xFFFFFF);
			frame.graphics.drawRect(0, 0, _enemyImageMax, _enemyImageMax);
			frame.x = this.stage.stageWidth / 2 - frame.width / 2;
			frame.y = this.stage.stageHeight / 2 - frame.height / 2;
			this.addChild(frame);
			
			//LoadButton
			var loadBtn:PushButton = new PushButton(this, 0, 0, "load Image", loadBrowse);
			
			// サイズ表示用 Text
			textComp = new Text(this, 0, 431);
			textComp.width = 465;
			textComp.height = 34;
			
			// Bitmap
			_enemyBitmap = new Bitmap();
			_enemyBitmap.smoothing = true;
			addChild(_enemyBitmap);
		}
		
		private function loadBrowse(e:MouseEvent):void
		{
			_fr.browse();
		}
		
		private function fileSelectedHandler(e:Event):void 
		{
			_fr.addEventListener(ProgressEvent.PROGRESS,onProgress);
			_fr.addEventListener(Event.COMPLETE,onComplete);
			// _fr.addEventListener(Event.OPEN, onOpen);
			// _fr.addEventListener(IOErrorEvent.IO_ERROR, onIoError);
			_fr.load(); // 読み込み処理を開始

		}
		
		private function onProgress(e:ProgressEvent):void
		{
			trace("読み込んだバイト数:" + e.bytesLoaded + "、 全体のバイト数:" + e.bytesTotal);
		}
		
		private function onComplete(e:Event):void
		{
			_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoadComplete);
			_loader.loadBytes(_fr.data);
			
			// fr.type を参考にオブジェクト変換する等の処理を記述
			// fr.removeEventListener(...)
		}
		
		private function imgLoadComplete(e:Event):void 
		{
			trace("enemyImage Load Completed");
			
			var image:BitmapData = Bitmap(_loader.content).bitmapData;
			var orgWidth:uint  = image.width;
			var orgHeight:uint = image.height;
			var scale:Number = _enemyImageMax / Math.max(orgWidth, orgHeight);
			
			if (_enemyImage) _enemyImage.dispose();
			_enemyImage = new BitmapData(orgWidth * scale, orgHeight * scale);
			_enemyImage.draw(image, new Matrix(scale, 0, 0, scale));
			
			_enemyBitmap.bitmapData = _enemyImage;
			_enemyBitmap.x = (stage.stageWidth  - _enemyBitmap.width)  / 2;
			_enemyBitmap.y = (stage.stageHeight - _enemyBitmap.height) / 2;
			
			textComp.text = "original image width:" + orgWidth + ", original image height:" + orgHeight + "\ntransformed iamge width:" + _enemyImage.width + ", transformed image height:" + _enemyImage.height;
		}
		
	}
	
}