2009-10-30 5 views
2

J'ai suivi ce tutoriel pour recadrer les images en flex: http://code.mediablur.com/ImageCropper/ImageCropperDemo.html.Recadrer l'image en flex en utilisant une forme non-rectangulaire

Au cœur de son recadrage est l'utilisation d'une méthode appelée "copyPixels". Cependant, cette méthode prend comme l'un de ses arguments une forme rectangulaire pour sa région de recadrage. Y a-t-il d'autres stratégies que je peux utiliser pour le recadrer sans utiliser de rectangle.

Je pars après avoir laissé l'utilisateur spécifier la région qui doit être recadrée en utilisant une série de points.

Répondre

0

L'image résultante doit être un rectangle, bien sûr, mais vous pouvez masquer transparent à l'aide BitmapData.draw et 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); 

Pour les cultures, vous auriez probablement faire quelque chose de plus de fantaisie dans les dernières lignes- -copier une région au lieu de cloner l'ensemble originalImage, et/ou appliquer une transformation lors de l'application de maskShape.

(je crois qu'il est nécessaire d'utiliser un DisplayObject utiliser BlendMode s, mais ce n'est pas clair dans la documentation.)

Questions connexes