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

Estoy usando este código. Proporcione algunas soluciones.Gracias por adelantadoRecorte de imagen que no funciona correctamente en iOS 6.0. Trabajando bien en el simulador.

+0

ejemplos de códigos y tutoriales .... http://developer.apple.com/library/mac/#/legacy/mac/library/samplecode/Cropped_Image/Introduction/Intro.html http: //www.icodeblog. com/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

Respuesta

4

CGImageCreateWithImageInRect no maneja la orientación de la imagen correctamente. Hay muchas técnicas de cultivo extrañas y maravillosas en la red que involucran declaraciones gigantes de switch/case (vea los enlaces en la respuesta de Ayaz), pero si permanece en el nivel UIKit y usa solo los métodos en UIImage para hacer el sorteo, todos los detalles esenciales son cuidados por usted.

El siguiente método es tan simple como usted puede conseguir y funciona en todos los casos que he encontrado:

- (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; 
} 

es posible que desee cambiar el valor del argumento opaque si no se necesita transparencia.

+0

Gracias por su respuesta. Esto también funciona para mi antiguo código fuente. Mi problema es que la imagen de recorte es mucho más zoom y borrosa, este problema ocurrió solo en el dispositivo. Cualquier otra idea amablemente ayúdame. – Mani

+0

Parece un problema con las escalas de la retina. El código que publiqué usará la escala de la pantalla en la imagen resultante, pero debe tener cuidado de que el rectángulo de recorte que pase esté en puntos, no en píxeles. –

+0

Cómo pasar píxeles. puede explicar por favor, sin entender su respuesta. Cómo manejar el problema de recorte de pantalla retina. – Mani

Cuestiones relacionadas