旋转位图时,它会削减角落

时间:2011-08-05 00:53:22

标签: actionscript-3 image-processing

我在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);

我假设我可以使用矩阵找到所有的点,但我只是手工完成它以保持我的理智。再次感谢

1 个答案:

答案 0 :(得分: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

然后,你需要将你的旋转位图翻译成minx,miny,把它放在正确的位置。