package {
	
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.PixelSnapping;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.net.URLRequest;	
 
	public class Main extends Sprite {
		
		public function Main() {
			var loader:Loader = new Loader();
			var info:LoaderInfo = loader.contentLoaderInfo;
			
			//ビットマップデータの読み込み
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			loader.load(new URLRequest("image.jpg"));
			
			//ステージのスケールを固定で、原点を左上に
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			
			//ビットマップの読み込みが完了した時
			function onComplete(event:Event):void {
				var bmd:BitmapData = new BitmapData(info.width, info.height);
				var bm:Bitmap = new Bitmap(bmd, PixelSnapping.NEVER, true);
				
				//ビットマップを描画
				bmd.draw(loader);
				stage.addChild(bm);
				adjustBitmap(bm);
			}
			
			//ビットマップをステージのサイズに合わせる
			function adjustBitmap(bm:Bitmap):void {
				var inner:Number = bm.width/bm.height; //ビットマップの縦横比
				var outer:Number; //ステージの縦横比
				
				//ステージのサイズが変更された時
				stage.addEventListener(Event.RESIZE, transSize);
				transSize();
				
				//ビットマップを拡大・縮小
				function transSize():void {
					var size_x:uint = stage.stageWidth;
					var size_y:uint = stage.stageHeight;
					
					outer = size_x/size_y;
					
					//ビットマップ、ステージの縦横比を比較してサイズを変更
					if (inner >= outer) {
						size_x = size_x*(inner/outer);
					} else {
						size_y = size_y*(outer/inner);
					}
					bm.width = size_x;
					bm.height = size_y;
				}
			}
		}
	}
}