CGImageCreateWithImageInRect
non gestisce correttamente l'orientamento dell'immagine. Ci sono molte tecniche di ritaglio strani e meravigliose là fuori sulla rete che coinvolgono gigantesche dichiarazioni di switch/case (vedi i link nella risposta di Ayaz), ma se stai a livello UIKit e usi solo i metodi su UIImage
stesso per fare il disegno, tutti i dettagli nitidi e grintosi si prendono cura di te.
Il seguente metodo è semplice come si può ottenere e funziona in tutti i casi che ho incontrato:
- (UIImage *)imageByCropping:(UIImage *)image toRect:(CGRect)rect
{
if (UIGraphicsBeginImageContextWithOptions) {
UIGraphicsBeginImageContextWithOptions(rect.size,
/* opaque */ NO,
/* scaling factor */ 0.0);
} else {
UIGraphicsBeginImageContext(rect.size);
}
// stick to methods on UIImage so that orientation etc. are automatically
// dealt with for us
[image drawAtPoint:CGPointMake(-rect.origin.x, -rect.origin.y)];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}
si consiglia di modificare il valore dell'argomento opaque
se non hai bisogno di trasparenza.
fonte
2012-09-05 12:52:39
codici di esempio ed esercitazioni .... http://developer.apple.com/library/mac/#/legacy/mac/library/samplecode/Cropped_Image/Introduction/Intro.html http: //www.icodeblog. it/2010/10/14/working-with-uigesturerecognizers/http://stackoverflow.com/questions/7950719/how-to-crop-the-image-in-iphone http://www.samwirch.com/blog/cropping-and-resizing-images-camera-ios-and-objective-c http://mobiledevelopertips.com/graphics/how-to-crop-an-image.html – Ayaz