as3 скопировать пользовательскую фигуру из растрового изображения - PullRequest
1 голос
/ 04 декабря 2009

Итак, У меня есть bitmapA, который является прямоугольным. У меня есть область обрезки, которую я хочу скопировать ...

Однако растровое изображение находится под углом к ​​кадрированию.

Как мне скопировать раздел из растрового изображения, которое не является прямоугольником, размещенным на оси x, y, ??

Или скопировать пользовательскую фигуру ????

Спасибо

Ответы [ 2 ]

5 голосов
/ 05 декабря 2009

Если вам нужно обрезать прямоугольник с вращением, вы можете использовать метод draw, как предложено shortstick , чтобы обрезать красную область, как показано ниже:

альтернативный текст http://axly.org/_tmp/stackoverflow/crop_sample.png

var crop_rect:Rectangle = new Rectangle(0,0,64,57);//size of the segment to copy
var crop_point:Point = new Point(40,50);//relative position of the crop from the top/left corner of the image
var crop_angle:Number = Math.PI / 12;//angle of the crop relative to image in radians (clockwise)

//transformation [tx,ty] parameters representing shift after rotation
var dA:Number = Math.atan(crop_point.y / crop_point.x) - crop_angle;
var tX:Number = crop_point.length * Math.cos(dA);
var tY:Number = crop_point.length * Math.sin(dA);

var scaleMatrix:Matrix = new Matrix(Math.cos( -  crop_angle),Math.sin( -  crop_angle), -  Math.sin( -  crop_angle),Math.cos( -  crop_angle), -  tX, -  tY);
var colorTransform:ColorTransform = new ColorTransform();//no colour transformation needed

//copy selected segment after rotation and shift to match the size of the crop
var result_bitmap = new BitmapData(crop_rect.width,crop_rect.height);
result_bitmap.draw(source_img, scaleMatrix , colorTransform, null, crop_rect, true);
var result_img:Bitmap = new Bitmap(result_bitmap);

Результат ниже: альтернативный текст http://axly.org/_tmp/stackoverflow/crop_result.png Надеюсь, это то, что вы искали, в противном случае, пожалуйста, дайте больше деталей и, что еще лучше, визуальный образец.

0 голосов
/ 04 декабря 2009

Самый простой способ сделать это - получить временное растровое изображение и использовать метод draw, чтобы продублировать угловое растровое изображение, а затем обрезать его. не самая эффективная память, но должна работать.

...