2011-08-05 10 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の変換をポイントに適用するためのものです。 –

関連する問題