public function draw(source:IbtimapDrawable,x:Number , y:Number , widht:Number , height:Number):Bitmap
{
var rectangle:Rectangle = new Rectangle(0,0,widht+0.5,height+0.5);
var bd:BitmapData = new BitmapData(widht+1,height+1);
var matrix:Matrix = new Matrix(1, 0, 0, 1, -x, -y);
bd.draw(sourceImage,matrix,null,null,_rectangle);
return new BitmapData(bd);
}
原理解說:
這是Draw API
public function draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
主要是使用ClipRect與matrix搭配來做到切片效果
- ClipRect是取一個固定點的可視窗口(將會由Rectangle來定義),在這窗口外的範圍圖片將不可見,所以我們draw的範圍也就是在這窗口中。
- 而藉由Matrix的垂直與水平位移來讓圖片各部份移到窗口。
- new Rectangle(0,0,widht+1,height+1); 與 new BitmapData(widht+1,height+1);會將長官都加1是因為有些狀況下,因為來源圖片想切的長寬無法整除,會造成無法貼齊圖片的現象,所以簡單的方式是以加1象素來解決。
沒有留言:
張貼留言