2011-08-24 12 views
19

He estado utilizando este método para convertir un UIView en UIImage. es decir instantánea de pantalla de una vista -Capture UIView como UIImage

@interface UIView(Extended) 

- (UIImage *) imageByRenderingView; 

@end 


@implementation UIView(Extended) 


- (UIImage *)imageByRenderingView 
{ 
    UIGraphicsBeginImageContext(self.bounds.size); 
    [self.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return resultingImage; 
} 

@end 

Para usarlo, hago esto -

UIImage *currImage = [self.view imageByRenderingView];

Esto da a la representación de la imagen de toda la UIView. Ahora quiero 2 imágenes, una es de la mitad superior de UIView y la otra es la mitad inferior. ¿Cómo puedo hacer eso?

+0

Tenga en cuenta que (desde mi experiencia) 'renderInContext:' puede ser bastante caro. Lo estoy haciendo en un 'cellForRowAtIndexPath:' (no teniendo, ahora mismo, otra opción) y esto obviamente significa retraso. –

Respuesta

11

Usted puede dividir su UIImage en dos por el uso de este código:

CGImageRef topOfImageCG = 
     CGImageCreateWithImageInRect(currImage.CGImage, 
             CGRectMake(0, 
               0, 
               currImage.size.width, 
               currImage.size.height/2.0)); 

UIImage *topOfImage = [UIImage imageWithCGImage:topOfImageCG]; 

CGImageRelease(topOfImageCG); 
+0

pero este selector toma - 'CGImageRef CGImageCreateWithImageInRect (imagen CGImageRef, CGRect rect);'. ¿Cómo convertir 'UIImage' que tengo a' CGImageRef'? –

+0

¡Gitalo! image.CGImage donde la imagen es un objeto UIImage :) –

+0

Tienes razón, acabo de actualizar la muestra. – pgb