2010-11-05 2 views
0

В моем приложении я сделать снимок экрана:iPhone захвата изображения падает приложение при сохранении фотографий Альбом

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; 

Тогда я хочу, чтобы сохранить его в альбом фотографий:

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

Кроме того, приложение падает, когда сохранение фотографий. Записанное изображение в порядке, я могу успешно загрузить и отобразить его. Я также попытался загрузить изображение из памяти и сохранить его в «Фото альбом», и он также работал.

Я думаю, что я делаю что-то не так, когда обрабатываю свое изображение. Любые идеи?

Спасибо!

+0

Вы получаете BAD_ACCESS ошибку, или что? – Ladislav

+0

К сожалению, я не могу проверить на самом устройстве, я получаю обратную связь от клиента. Также функция UIGetScreenImage() недоступна в симуляторе. – 321zeno

ответ

-1

Вы можете проверить разрешение? если его отключить, в следующий раз предупреждение не будет отображаться.

0

Поскольку этот вопрос слишком стар, я бы хотел показать более современный способ сделать то, что вы хотели.
Этот код может быть использован для захвата экрана:

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

И этот код, чтобы сохранить изображение:

[[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); 
    } 
}];} 
Смежные вопросы