2010-11-05 2 views
0

Dans mon application je fais une capture d'écran:de capture d'image iPhone bloque l'application lors de l'enregistrement de photos Album

UIImage *viewImage = [UIImage imageWithCGImage:UIGetScreenImage()]; 
CGRect cropRect = CGRectMake(0, 0, 320, 440); 
CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], cropRect); 
    viewImage = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef); 
    captureImage = [[UIImage alloc] init]; 
captureImage = viewImage; 

Ensuite, je veux enregistrer dans l'album photos:

UIImageWriteToSavedPhotosAlbum(anImage, self, @selector(savedPhotoImage:didFinishSavingWithError:contextInfo:), nil); 

- (void) savedPhotoImage:(UIImage *)image 
didFinishSavingWithError:(NSError *)error 
      contextInfo:(void *)contextInfo 
{  
NSString *themessage = @"This image has been saved to your Photos album. Tap to continue."; 
NSString *errorTitle = @"Image saved."; 
if (error) { 
    themessage = [error localizedDescription]; 
errorTitle = @"error"; 
} 
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:errorTitle 
               message:themessage 
               delegate:nil 
             cancelButtonTitle:@"OK" 
             otherButtonTitles:nil]; 
[alert show]; 
[alert release]; 
} 

Les application se bloque lorsque enregistrer dans l'album photos. L'image capturée est ok, je peux télécharger avec succès et l'afficher. J'ai également essayé de charger une image de la mémoire et de l'enregistrer dans l'album photos et cela a également fonctionné.

Je suppose que je fais quelque chose de mal quand je suis en train de traiter mon image .. Des idées?

Merci!

+0

-vous obtenir erreur BAD_ACCESS, ou quoi? – Ladislav

+0

Malheureusement, je ne peux pas tester sur le périphérique réel, je reçois seulement des commentaires d'un client. De plus, la fonction UIGetScreenImage() n'est pas disponible dans le simulateur. – 321zeno

Répondre

-1

Pouvez-vous vérifier la permission? si elle est désactivée, aucune alerte ne s'affichera la prochaine fois.

0

Comme cette question est trop ancienne, je voudrais montrer une façon plus moderne de faire ce que vous vouliez.
Ce code peut être utilisé pour capturer l'écran:

- (UIImage *) getScreenShot 
{ 
    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; 
    CGRect rect = [keyWindow bounds]; 
    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    [keyWindow.layer renderInContext:context]; 
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return img; 
} 

Et ce code pour enregistrer l'image:

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^ 
{ 
    PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:screenShot]; 
} 
completionHandler:^(BOOL success, NSError *error) 
{ 
    if (success) 
    { 
     NSLog(@"successfully saved"); 
    } 
    else 
    { 
     NSLog(@"error saving to photos: %@", error); 
    } 
}];} 
Questions connexes