2012-09-05 17 views
5
- (UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect 
{ 
    CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect); 
    UIImage *cropped = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    return cropped; 
} 

Sto usando questo codice. Fornire alcune soluzioni.Grazie anticipatamenteIl ritaglio dell'immagine non funziona correttamente in iOS 6.0. Funzionando bene nel simulatore.

+0

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

risposta

4

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.

+0

Grazie per la risposta. Funziona anche per il mio vecchio codice sorgente. Il mio problema è l'immagine di ritaglio è molto più zoom e sfocato, questo problema si è verificato solo sul dispositivo. Qualsiasi altra idea mi aiuta gentilmente. – Mani

+0

Sembra un problema con le scale retiniche. Il codice che ho postato utilizzerà la scala dello schermo nell'immagine risultante, ma è necessario fare attenzione che il rettangolo di ritaglio che si passa sia in punti, non in pixel. –

+0

Come passare i pixel. puoi spiegare per favore, non capendo la tua risposta. Come gestire il problema del ritaglio della retina. – Mani

Problemi correlati