2011-08-05 100 views
0

我旋轉AS3中的一些位圖數據。當我開始旋轉位圖時,角落會被切斷。我試圖找出位圖應該適合新旋轉的位圖的大小。當旋轉一個位圖,它削減了角落

目前使用

var point:Point=new Point(BMPHolder.x+BMPHolder.width/2,BMPHolder.y+BMPHolder.height/2); 
var RotateMatrix:Matrix = new Matrix(); 
var radains:Number = 45 * (Math.PI/180); 

myMatrix.tx -= point.x; 
myMatrix.ty -= point.y; 
myMatrix.rotate(radains); 
myMatrix.tx += point.x; 
myMatrix.ty += point.y; 

preApply = new BitmapData (BMPHolder.width,AdjustY, false); 
preApply.draw(BMPHolder,myMatrix, null, null, null, false); 

的答案我能得到這個工作的幫助代碼林。這是我必須添加的代碼。

 //Anchor point. 
     xArray.push(0); 
     yArray.push(0); 

     xArray.push((BMPHolder.width * Math.cos(radains)) - (BMPHolder.height * Math.sin(radains))); 
     yArray.push((BMPHolder.width * Math.sin(radains)) + (BMPHolder.height * Math.cos(radains))); 

     xArray.push((BMPHolder.width * Math.cos(radains)) - (BMPHolder.y * Math.sin(radains))); 
     yArray.push((BMPHolder.width * Math.sin(radains)) + (BMPHolder.y * Math.cos(radains))); 

     xArray.push((BMPHolder.x * Math.cos(radains)) - (BMPHolder.height * Math.sin(radains))); 
     yArray.push((BMPHolder.x * Math.sin(radains)) + (BMPHolder.height * Math.cos(radains))); 


     var NewWidth:Number = MaxValue(xArray) - MinValue(xArray); 
     var NewHeight:Number = MaxValue(yArray) - MinValue(yArray); 

     myMatrix.tx -= point.x; 
     myMatrix.ty -= point.y; 
     myMatrix.rotate(radains); 

     myMatrix.tx += Math.abs(NewWidth/2); 
     myMatrix.ty += Math.abs(NewHeight/2); 

我假設我可以使用矩陣找到所有的點,但我只是用手來保持我的理智。再次感謝

回答

2

旋轉角點,然後從旋轉點集中提取最大和最小x值和y值。然後,您可以使用這些來計算最小大小的位圖來保存數據。你要的東西,如folioing僞代碼:

points = [[0,0], [0,height], [width,0], [width, height]] 
points = xform(points, myMatrix) 
minx = min(xcoords(points)) 
maxx = max(xcoords(points)) 
miny = min(ycoords(points)) 
maxy = max(ycoords(points)) 

newwidth = maxx - minx 
newheight = maxy - miny 

然後,您將需要通過瘋丫頭翻譯您的旋轉後的位,MINY把它放在正確的位置。

+0

很抱歉,xform到底是什麼? – MrB

+0

在這種情況下,xform代表將myMatrix中的變換應用於點。 –