2011年4月26日 星期二

BitmapData Draw API 運用 : 將圖片切片

Draw API 圖片切片基本原理
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象素來解決。

沒有留言:

張貼留言