Es posible en el objetivo C que podamos tomar la captura de pantalla y almacenar esta imagen en UIImage.cómo tomar una captura de pantalla del iPhone programáticamente?
Respuesta
Es necesario crear un contexto de mapa de bits del tamaño de la pantalla y utilizar
[self.view.layer renderInContext:c]
para copiar su vista en ella. Una vez hecho esto, puede usar
CGBitmapContextCreateImage(c)
para crear una CGImage desde su contexto.
Elaboración:
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];
Tenga en cuenta que si se ejecuta el código en respuesta a un clic sobre un UIButton, la imagen se muestra que la tecla pulsada.
Sí, aquí hay un enlace a la Apple Developer foros https://devforums.apple.com/message/149553
El código anterior asume que la vista que se va a capturar vive en la pantalla principal ... es posible que no.
¿Funcionaría esto para capturar siempre el contenido de la ventana principal? (Advertencia: compilado en 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;
}
Técnica Q & Un QA1703 captura de pantalla en Aplicaciones UIKit
http://developer.apple.com/iphone/library/qa/qa2010/qa1703.html
Gracias. + 1 por el recurso de manzana. –
probar esto ...
- (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);
}
Usa este código para tomar la captura de pantalla:
-(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];
}
UIGraphicsBeginImageContext(self.window.bounds.size);
[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData * data = UIImagePNGRepresentation(image);
[data writeToFile:@"foo.png" atomically:YES];
actualización de abril de 2011: para la visualización de la retina, cambiar la primera línea en esto:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
{
UIGraphicsBeginImageContextWithOptions(self.window.bounds.size, NO, [UIScreen mainScreen].scale);
}
else
{
UIGraphicsBeginImageContext(self.window.bounds.size);
}
- (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);
}
Funciona al 100% en mi programa, ¿por qué votar abajo? –
// 100% Trabajo
- (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;
}
La respuesta de @dhaya funciona para mí, pero no se olvide de actualizar la configuración de "Info.plist" para guardar la imagen en la biblioteca. Este código debe agregarse en el archivo "Info.plist" para guardar la imagen de captura en Photo libraray.
<key>NSPhotoLibraryAddUsageDescription</key>
<string>NeedLibrary access for save Images on Album</string>
- 1. ¿Cómo tomar la captura de pantalla programáticamente?
- 2. Sin iPhone, ¿cómo tomar una captura de pantalla con XCode?
- 3. Tomar captura de pantalla de una página web (remota) programáticamente
- 4. ¿Cómo tomar una captura de pantalla de una página web?
- 5. ¿Cómo tomar una captura de pantalla con unidad HTML?
- 6. Captura de pantalla del iPhone para ver
- 7. Cómo tomar una captura de pantalla con FireMonkey (multiplataformas)
- 8. Cómo tomar una captura de pantalla en OpenGL
- 9. Android tome la captura de pantalla programáticamente
- 10. Tomar una captura de pantalla de área específica
- 11. Tomar una captura de pantalla con Pyglet [Fix'd]
- 12. C#: cómo tomar una captura de pantalla de una parte de la pantalla
- 13. ¿Cómo tomar una captura de pantalla de iPhone de toda la vista, incluidas las partes fuera de la pantalla?
- 14. Tomar una captura de pantalla parcial en el iPad
- 15. ¿Cómo tomar una captura de pantalla del área visible de UIScrollView?
- 16. ¿Hay alguna manera de tomar una captura de pantalla del escritorio de Windows del usuario?
- 17. Toma de captura de pantalla de una página web programáticamente
- 18. Tomar automáticamente una captura de pantalla del servidor x si el contenido de la ventana cambia
- 19. ¿Cómo puedo tomar una captura de pantalla en una aplicación de Windows?
- 20. cómo tomar la captura de pantalla del video que se está reproduciendo actualmente?
- 21. ¿Es técnicamente posible tomar una captura de pantalla de un sitio web mediante programación?
- 22. Captura de pantalla de video en iOS programáticamente
- 23. Cómo tomar la captura de pantalla de una parte de Google Maps use JavaScript
- 24. ¿Cómo puedo tomar una captura de pantalla/imagen de un sitio web usando Python?
- 25. Cómo tomar una captura de pantalla en Mac OS X usando Cocoa o C++
- 26. Cómo tomar una captura de pantalla de la página HTML procesada
- 27. cómo tomar una instantánea de la pantalla mediante programación?
- 28. Captura de pantalla de la segunda pantalla
- 29. ¿Cómo puedo tomar una captura de pantalla de un sitio web con .NET?
- 30. ¿Cómo tomar una captura de pantalla de la ventana activa en Delphi?
posible duplicado http://stackoverflow.com/questions/2214957/how-do-i-take-a-screen-shot-of-a-uiview –
posible duplicado de [Cómo tomar una captura de pantalla mediante programación ] (http://stackoverflow.com/questions/2200736/how-to-take-a-screenshot-programmatically) –