In as3, only vector graphs support 9-grid scaling, and bitmap setting scale9grid does not work;
Solution: 1. Split the bitmap into a vector image, cut it into 9 points, and merge it;
Bitmapslice9.zip.
I usually use this method, but this method has flaws. After the image is stretched, virtual edges and fine seams often appear;
2. another method is to use program control. The principle is very simple: Use a program to cut the bitmap into nine blocks, put it in a Sprite, and then rewrite the sprite width and height methods, reset the positions of Bitmap Based on the size change. in this way, the bitmap is scaled without deformation.
package{ import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; public class BitmapScale9Grid extends Sprite { private var source : Bitmap; private var scaleGridTop : Number; private var scaleGridBottom : Number; private var scaleGridLeft : Number; private var scaleGridRight : Number; private var leftUp : Bitmap; private var leftCenter : Bitmap; private var leftBottom : Bitmap; private var centerUp : Bitmap; private var center : Bitmap; private var centerBottom : Bitmap; private var rightUp : Bitmap; private var rightCenter : Bitmap; private var rightBottom : Bitmap; private var _width : Number; private var _height : Number; private var minWidth : Number; private var minHeight : Number; public function BitmapScale9Grid(source:Bitmap, scaleGridTop:Number, scaleGridBottom:Number, scaleGridLeft:Number, scaleGridRight:Number ) { this.source = source; this.scaleGridTop = scaleGridTop; this.scaleGridBottom = scaleGridBottom; this.scaleGridLeft = scaleGridLeft; this.scaleGridRight = scaleGridRight; init(); } private function init() : void { _width = source.width; _height = source.height; leftUp = getBitmap(0, 0, scaleGridLeft, scaleGridTop); this.addChild(leftUp); leftCenter = getBitmap(0, scaleGridTop, scaleGridLeft, scaleGridBottom - scaleGridTop); this.addChild(leftCenter); leftBottom = getBitmap(0, scaleGridBottom, scaleGridLeft, source.height - scaleGridBottom); this.addChild(leftBottom); centerUp = getBitmap(scaleGridLeft, 0, scaleGridRight - scaleGridLeft, scaleGridTop); this.addChild(centerUp); center = getBitmap(scaleGridLeft, scaleGridTop, scaleGridRight - scaleGridLeft, scaleGridBottom - scaleGridTop); this.addChild(center); centerBottom = getBitmap(scaleGridLeft, scaleGridBottom, scaleGridRight - scaleGridLeft, source.height - scaleGridBottom); this.addChild(centerBottom); rightUp = getBitmap(scaleGridRight, 0, source.width - scaleGridRight, scaleGridTop); this.addChild(rightUp); rightCenter = getBitmap(scaleGridRight, scaleGridTop, source.width - scaleGridRight, scaleGridBottom - scaleGridTop); this.addChild(rightCenter); rightBottom = getBitmap(scaleGridRight, scaleGridBottom, source.width - scaleGridRight, source.height - scaleGridBottom); this.addChild(rightBottom); minWidth = leftUp.width + rightBottom.width; minHeight = leftBottom.height + rightBottom.height; } private function getBitmap(x:Number, y:Number, w:Number, h:Number) : Bitmap { var bit:BitmapData = new BitmapData(w, h); bit.copyPixels(source.bitmapData, new Rectangle(x, y, w, h), new Point(0, 0)); var bitMap:Bitmap = new Bitmap(bit); bitMap.x = x; bitMap.y = y; return bitMap; } override public function set width(w : Number) : void { if(w < minWidth) { w = minWidth; } _width = w; refurbishSize(); } override public function set height(h : Number) : void { if(h < minHeight) { h = minHeight; } _height = h; refurbishSize(); } private function refurbishSize() : void { leftCenter.height = _height - leftUp.height - leftBottom.height; leftBottom.y = _height - leftBottom.height; centerUp.width = _width - leftUp.width - rightUp.width; center.width = centerUp.width; center.height = leftCenter.height; centerBottom.width = center.width; centerBottom.y = leftBottom.y; rightUp.x = _width - rightUp.width; rightCenter.x = rightUp.x; rightCenter.height = center.height; rightBottom.x = rightUp.x; rightBottom.y = leftBottom.y; } }}