как сделать программный снимок экрана для iPhone?

Возможно ли в объективе C взять экранный снимок экрана и сохранить это изображение в UIImage.

Вам нужно создать растровый контекст размера вашего экрана и использовать

[self.view.layer renderInContext:c] 

чтобы скопировать ваш просмотр в нем. Как только это будет сделано, вы можете использовать

 CGBitmapContextCreateImage(c) 

для создания CGImage из вашего контекста.

Разработка:

 CGSize screenSize = [[UIScreen mainScreen] applicationFrame].size; CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); CGContextRef ctx = CGBitmapContextCreate(nil, screenSize.width, screenSize.height, 8, 4*(int)screenSize.width, colorSpaceRef, kCGImageAlphaPremultipliedLast); CGContextTranslateCTM(ctx, 0.0, screenSize.height); CGContextScaleCTM(ctx, 1.0, -1.0); [(CALayer*)self.view.layer renderInContext:ctx]; CGImageRef cgImage = CGBitmapContextCreateImage(ctx); UIImage *image = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); CGContextRelease(ctx); [UIImageJPEGRepresentation(image, 1.0) writeToFile:@"screen.jpg" atomically:NO]; 

Обратите внимание: если вы запустите свой код в ответ на щелчок на UIButton, ваше изображение покажет, что нажата кнопка.

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

Будет ли эта работа всегда захватывать содержимое главного windows? (предупреждение: скомпилировано в StackOverflow)

 - (UIImage *) captureScreen { 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; } 

Технический Q & A QA1703 Захват экрана в приложениях UIKit

http://developer.apple.com/iphone/library/qa/qa2010/qa1703.html

попробуй это…

 - (UIImage*)captureView:(UIView *)view { CGRect rect = [[UIScreen mainScreen] bounds]; UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); [view.layer renderInContext:context]; UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return img; } - (void)saveScreenshotToPhotosAlbum:(UIView *)view { UIImageWriteToSavedPhotosAlbum([self captureView:self.view], nil, nil,nil); } 
 UIGraphicsBeginImageContext(self.window.bounds.size); [self.window.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); NSData * data = UIImagePNGRepresentation(image); [data writeToFile:@"foo.png" atomically:YES]; 

ОБНОВЛЕНИЕ Апрель 2011: для отображения сетчатки измените первую строку на следующее:

 if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { UIGraphicsBeginImageContextWithOptions(self.window.bounds.size, NO, [UIScreen mainScreen].scale); } else { UIGraphicsBeginImageContext(self.window.bounds.size); } 

// 100% Работа

 - (UIImage *)screenshot { UIGraphicsBeginImageContextWithOptions(self.main_uiview.bounds.size, NO, 2.0f); [self.main_uiview drawViewHierarchyInRect:_main_uiview.bounds afterScreenUpdates:YES]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } 

Да, вот ссылка на Форумы разработчиков Apple https://devforums.apple.com/message/149553

Используйте этот код, чтобы сделать снимок экрана:

 -(void)webViewDidFinishLoad:(UIWebView *)webView { UIGraphicsBeginImageContext(self.webView.bounds.size); [self.webView.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *screenshotImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(screenshotImage, nil, nil, nil); NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *str1=[NSString stringWithFormat:@"%d",myInt]; NSString *pngFilePath = [NSString stringWithFormat:@"%@/page_%@.png",docDir,str1]; // any name u want for image NSLog(@"%@",pngFilePath); NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(screenshotImage)]; [data1 writeToFile:pngFilePath atomically:YES]; } 
 - (void)SnapShot { if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale); } else { UIGraphicsBeginImageContext(self.view.bounds.size); } [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); NSData *data = UIImagePNGRepresentation(image); [data writeToFile:@"snapshot.png" options:NSDataWritingWithoutOverwriting error:Nil]; [data writeToFile:@"snapshot.png" atomically:YES]; UIImageWriteToSavedPhotosAlbum([UIImage imageWithData:data], nil, nil, nil); } 
  • На iPhone: узнать, какая песня сейчас играет? (в музыкальном проигрывателе iPod)
  • Выясните, кадр UIBarButtonItem в окне?
  • Регулировка громкости проигрывателя AVPlayer
  • AVAudioPlayer не воспроизводит звук
  • Выбрать программную строку таблицы таблиц
  • Точка с запятой после имени метода в файле реализации Objective-C
  • UIDatePicker, устанавливающий максимальные и минимальные даты на основе сегодняшней даты
  • Почему UINavigationBar крадет события касания?
  • Изменение цвета фона в UIAlertView?
  • Данные о сердечном ритме на яблоне
  • iphone error: expected '=', ',', ';', 'asm' или '__attribute__' перед '' foo '
  • Interesting Posts
    Давайте будем гением компьютера.