开发者

When Rotating a bitmap it cuts corners off

I rotating some bitmap data in AS3. When ever I start rotating the bitmap the corners get cut off. I'm trying figure out what size the bitmap should be to fit the newly rotated bitmap.

The code Im currently using

var point:Point=new Point(BMPHolder.x+BMPHolder.width/2,BMPHolder.y+B开发者_如何转开发MPHolder.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);

With the help of the answer i was able to get this working. This is the code I had to add.

       //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);

I'm assuming that I could have used the matrix to find all the points but I just did it by hand to keep my sanity. Thanks again


Rotate your corner points, and then extract the maximum and minimum x and y values from the set of rotated points. You can then use those to compute the minimum size bitmap to hold the data. You'll want to something like the folioing pseudocode:

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

You will then need to translate your rotated bitmap by minx, miny to put it in the right spot.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜