При вращении растрового изображения оно обрезает углы - PullRequest
0 голосов
/ 05 августа 2011

Я вращал некоторые растровые данные в 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 Ответ

2 голосов
/ 05 августа 2011

Поверните свои угловые точки, а затем извлеките максимальные и минимальные значения x и y из набора повернутых точек.Затем вы можете использовать их для вычисления растрового изображения минимального размера для хранения данных.Вам понадобится что-то вроде псевдокода:

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, чтобы поместить его в нужное место.

...