2011-08-24 3 views
19

J'ai utilisé cette méthode pour convertir un UIView en UIImage. dire capture d'écran d'une vue -Capture UIView comme 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 

Pour l'utiliser, je le fais -

UIImage *currImage = [self.view imageByRenderingView];

Cela donne la représentation de l'image de l'ensemble UIView. Maintenant, je veux 2 images, l'un est de la moitié supérieure de la UIView et l'autre est la moitié inférieure. Comment je fais ça?

+0

Notez que (d'après mon expérience) 'renderInContext:' peut être assez cher. Je le fais dans un 'cellForRowAtIndexPath:' (ne pas avoir, en ce moment, une autre option) et cela signifie évidemment retard. –

Répondre

11

Vous pouvez diviser votre UIImage en deux en utilisant ce code:

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

UIImage *topOfImage = [UIImage imageWithCGImage:topOfImageCG]; 

CGImageRelease(topOfImageCG); 
+0

mais ce sélecteur prend - 'CGImageRef CGImageCreateWithImageInRect (image CGImageRef, CGRect rect);'. Comment convertir 'UIImage' que j'ai à' CGImageRef'? –

+0

Git It! image.CGImage où l'image est un objet UIImage :) –

+0

Vous avez raison, je viens de mettre à jour l'échantillon. – pgb

Questions connexes