Обрезать изображение в флекс, используя непрямоугольную форму - PullRequest
2 голосов
/ 30 октября 2009

Я следовал этому уроку, чтобы обрезать изображения в flex: http://code.mediablur.com/ImageCropper/ImageCropperDemo.html.

В основе его обрезки лежит метод, называемый «copyPixels». Однако этот метод принимает в качестве одного из аргументов прямоугольную форму для своей области кадрирования. Существуют ли другие стратегии, которые я могу использовать, чтобы обрезать его, не используя прямоугольник.

Я собираюсь позволить пользователю указать регион, который должен быть обрезан, используя серию точек.

1 Ответ

0 голосов
/ 30 октября 2009

Полученное изображение должно быть прямоугольником, но вы можете замаскировать его прозрачностью, используя BitmapData.draw и BlendMode:

var originalImage:BitmapData; // defined
var maskPath:GraphicsPath; // defined

var maskShape:Shape = new Shape();
maskShape.graphics.beginFill(0, 0); // fill region with transparent
maskShape.graphics.drawRect(0, 0, originalImage.width, originalImage.height);
maskShape.graphics.endFill();

maskShape.graphics.beginFill(0xFF0000);
maskShape.graphics.drawPath(maskPath.commands, maskPath.data, maskPath.winding);
maskShape.graphics.endFill();

var resultImage:BitmapData = originalImage.clone();
resultImage.draw(maskShape, null, null, BlendMode.ALPHA);

Для обрезки вы, вероятно, могли бы сделать что-то более причудливое в последних нескольких строках - скопировать область вместо клонирования всего originalImage и / или применить преобразование при применении maskShape.

(Я полагаю, что для использования BlendMode s необходимо использовать DisplayObject, но это не ясно в документации.)

...