AS3对外部加载的位图进行九宫格缩放

package { 

	import flash.geom.Point; 
	import flash.geom.Rectangle; 
	import flash.net.URLRequest; 
	import flash.events.Event; 
	import flash.display.Loader; 
	import flash.display.BitmapData; 
	import flash.display.Bitmap; 
	import flash.display.Sprite; 
 
	/** * @author jh7086 */ 
 
	
	[SWF (width="1000", height="800", backgroundColor="0xffffff")] 
 
	public class BitmapTest extends Sprite { 
		private var bitmap : Bitmap; 
		private var loader : Loader; 
		private var source : BitmapData; 
 
		private var tile : Sprite;
 
		private var bound : Rectangle;
		private var grid9 : Rectangle;
 
		private var tbound : Rectangle;
		private var tgrid9 : Rectangle;
 
		public function BitmapTest() { 
			JH.print("Start>>>>>>>>>>"); 
			bitmap = new Bitmap(); 
			addChild(bitmap); 
			loader = new Loader(); 
			loader.contentLoaderInfo.addEventListener(Event.INIT, loader_complete); 
			loader.load(new URLRequest("dlgFinger.png")); 
			addChild(loader); 
			
			bound = new Rectangle(0, 0, 200, 100);
			grid9 = new Rectangle();
			grid9.left = bound.left+15;
			grid9.top = bound.top+40;
			grid9.right = bound.right-15;
			grid9.bottom = bound.bottom-20;
			
			tbound = new Rectangle(0, 0, 500, 500);
			tgrid9 = new Rectangle();
			tgrid9.left=tbound.left + (grid9.left - bound.left);
			tgrid9.top=tbound.top + (grid9.top-bound.left);
			tgrid9.right=tbound.right - (bound.right - grid9.right);
			tgrid9.bottom=tbound.bottom - (bound.bottom - grid9.bottom);
			
			tile = new Sprite;
			tile.graphics.beginFill(0xff0000, 0.2);
			tile.graphics.drawRect(grid9.x, grid9.y, grid9.width, grid9.height);
			//tile.graphics.beginFill(0x00ff00, 0.2);
			//tile.graphics.drawRect(tgrid9.x, tgrid9.y+100, tgrid9.width, tgrid9.height);
			addChild(tile);
		}
 
		private function loader_complete(event : Event) : void { 
			var x : int;
			var y : int;
			var w : int;
			var h : int;
			
			var k:int;
			var d:int;
			
			var i:int;
			
			var bd : BitmapData;
			
			source = Bitmap(loader.content).bitmapData;
			bd = new BitmapData(tbound.width, tbound.height, true, 0x66ff0000); 
			//左上,原图
			x = bound.left;
			y = bound.top;
			w = grid9.left - bound.left;
			h = grid9.top - bound.top;
			bd.copyPixels(source, new Rectangle(x, y, w, h), new Point(tbound.left, tbound.top));
			//左,垂直拉伸 
			k = tgrid9.height / grid9.height;
			d = tgrid9.height % grid9.height;
			x = bound.left;
			y = grid9.top;
			w = grid9.left - bound.left;
			h = grid9.height;
			for(i=0;i<k;i++){
				bd.copyPixels(source, new Rectangle(x, y, w, h), new Point(tbound.left,tgrid9.top + i * h));
			}
			bd.copyPixels(source, new Rectangle(x, y, w, d), new Point(tbound.left, tgrid9.top + i * h));
			//左下,原图
			x = bound.left;
			y = grid9.bottom;
			w = grid9.left - bound.left;
			h = bound.bottom - grid9.bottom;
			bd.copyPixels(source, new Rectangle(x, y, w, h), new Point(tbound.left, tgrid9.bottom));
			//下,水平拉伸
			k = tgrid9.width / grid9.width;
			d = tgrid9.width % grid9.width;
			x = grid9.left;
			y = grid9.bottom;
			w = grid9.width;
			h = bound.bottom - grid9.bottom;
			for(i=0;i<k;i++){
				bd.copyPixels(source, new Rectangle(x, y, w, h), new Point(tgrid9.left + i * w, tgrid9.bottom));
			}
			bd.copyPixels(source, new Rectangle(x, y, d, h), new Point(tgrid9.left + i * w, tgrid9.bottom));
			//右下,原图
			x = grid9.right;
			y = grid9.bottom;
			w = bound.right - grid9.right;
			h = bound.bottom - grid9.bottom;
			bd.copyPixels(source, new Rectangle(x, y, w, h), new Point(tgrid9.right, tgrid9.bottom));
			//右,垂直拉伸
			k = tgrid9.height / grid9.height;
			d = tgrid9.height % grid9.height;
			x = grid9.right;
			y = grid9.top;
			w = bound.right-grid9.right;
			h = grid9.height;
			for(i=0;i<k;i++){
				bd.copyPixels(source, new Rectangle(x, y, w, h), new Point(tgrid9.right, tgrid9.top + i * h));
			}
			bd.copyPixels(source, new Rectangle(x, y, w, d), new Point(tgrid9.right, tgrid9.top + i * h));
			//右上,原图
			x = grid9.right;
			y = bound.top;
			w = bound.right - grid9.right;
			h = grid9.top - bound.top;
			bd.copyPixels(source, new Rectangle(x, y, w, h), new Point(tgrid9.right, tbound.top));
			//上,水平拉伸
			k = tgrid9.width / grid9.width;
			d = tgrid9.width % grid9.width;
			x = grid9.left;
			y = bound.top;
			w = grid9.width;
			h = grid9.top - bound.top;
			for(i=0;i<k;i++){
				bd.copyPixels(source, new Rectangle(x, y, w, h), new Point(tgrid9.left+i*w, tbound.top));
			}
			bd.copyPixels(source, new Rectangle(x, y, d, h), new Point(tgrid9.left+i*w, tbound.top));
			
			//中间,垂直拉伸,水平拉伸
			k = tgrid9.width / grid9.width;
			d = tgrid9.width % grid9.width;
			x = grid9.left;
			y = grid9.top;
			w = grid9.width;
			h = Math.min(grid9.height,tgrid9.height);
			for(i=0;i<k;i++){
				bd.copyPixels(source, new Rectangle(x, y, w, h), new Point(tgrid9.left + i * w, tgrid9.top));
			}
			bd.copyPixels(source, new Rectangle(x, y, d, h), new Point(tgrid9.left + i * w, tgrid9.top));
			
			k = tgrid9.height / grid9.height;
			d = tgrid9.height % grid9.height;
			x = tgrid9.left;
			y = tgrid9.top;
			w = tgrid9.width;
			h = grid9.height;
			for(i=1;i<k;i++){
				bd.copyPixels(bd, new Rectangle(x, y, w, h), new Point(tgrid9.left, tgrid9.top + i * h));
			}
			bd.copyPixels(bd, new Rectangle(x, y, w, d), new Point(tgrid9.left, tgrid9.top + i * h));
			
			
			//
			bitmap.bitmapData=bd;
			bitmap.y = source.height + 1; 
			
			JH.print(source.width, source.height);
			JH.print(bitmap.width, bitmap.height); 
		} 
	} 
} 
 

你可能感兴趣的:(as3)