2010-09-04 18 views
0

Voici le code que j'ai, mais il s'écrase ... des idées?Comment agrandir et rogner un UIImage?

UIImage *tempImage = [[UIImage alloc] initWithData:imageData]; 
CGImageRef imgRef = [tempImage CGImage]; 
[tempImage release]; 

CGFloat width = CGImageGetWidth(imgRef); 
CGFloat height = CGImageGetHeight(imgRef); 
CGRect bounds = CGRectMake(0, 0, width, height); 
CGSize size = bounds.size; 

CGAffineTransform transform = CGAffineTransformMakeScale(4.0, 4.0); 

UIGraphicsBeginImageContext(size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextConcatCTM(context, transform); 
CGContextDrawImage(context, bounds, imgRef); 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Que manque-t-il ici? Essentiellement juste essayer d'agrandir l'image et la recadrer pour avoir la même taille que l'original.

Merci

+0

quel type de collision? Quel est le message d'erreur? Quelle ligne provoque des accidents? – vodkhang

Répondre

1

Le problème est cette ligne:

CGImageRef imgRef = [tempImage CGImage]; 

Ou plus précisément, le suivi direct de cette ligne:

[tempImage release]; 

Vous obtenez un objet CF ici, le CGImageRef. L'objet Foundation Core dispose uniquement de la gestion de la mémoire de conservation/libération, mais pas d'objets auto-libérés. Par conséquent, lorsque vous publiez le UIImage dans la deuxième ligne, le CGImageRef sera également supprimé. Et ceci signifie encore que c'est indéfini quand vous essayez de le dessiner là-bas.

Je peux penser à trois corrections:

  • utilisation autorelease pour retarder la libération de l'image: [tempImage autorelease];
  • déplacer la sortie au fond de votre méthode
  • conserver et libérer l'image à l'aide CFRetain et CFRelease.
0

Essayez celui-ci:

-(CGImageRef)imageCapture 
{ 
    UIGraphicsBeginImageContext(self.view.bounds.size); 
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    CGRect rect= CGRectMake(0,0 ,320, 480); 

    CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], rect); 
    return imageRef; 
} 

utiliser la ligne ci-dessous chaque fois que vous voulez capturer l'écran

UIImage *captureImg=[[UIImage alloc] initWithCGImage:[self imageCapture]];