Quiero capturar una porción particular de la pantalla del iPhone. Usé UIGraphicsBeginImageContextWithOptions
, pero no pude capturar una parte de la pantalla con esto. Por favor, ayúdenme.ios cómo capturar una porción particular de la pantalla
Respuesta
Puede tomar una captura de pantalla usando UIGraphicsGetImageFromCurrentContext
. Escribió debajo el código de la memoria, por lo que los errores posibles. Por favor corrígelo tú mismo.
- (UIImage*)captureView:(UIView *)yourView {
CGRect rect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[yourView.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
puede utilizar este código
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGRect rect = CGRectMake(250,61 ,410, 255);
CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], rect);
UIImage *img = [UIImage imageWithCGImage:imageRef];
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
CGImageRelease(imageRef);
Otro método para capturar pantalla clara;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
UIGraphicsBeginImageContextWithOptions(self.captureView.frame.size, NO, [UIScreen mainScreen].scale);
else
UIGraphicsBeginImageContext(self.captureView.frame.size);
[self.captureView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
[viewImage drawInRect:CGRectMake(0.0, 0.0, 640,960)];
//NSData*m_Imgdata=UIImagePNGRepresentation(viewImage);
NSData*m_Imgdata=UIImageJPEGRepresentation(viewImage, 1.0);
// UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
UIGraphicsEndImageContext();
la respuesta por @Superdev está justo en punto, lo que quiero añadir es un pequeño truco si desea capturar una vista padre y evitar subvistas (en particular la vista de superposición) lo que puede hacer es hacer que este subvista una propiedad y el uso de la siguiente
CGFloat width = CGRectGetWidth(self.view.bounds);
CGFloat height = CGRectGetHeight(self.view.bounds);
_overlayView.hidden = YES;
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGRect rect = CGRectMake(0,0 ,width, height);
CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], rect);
UIImage *img = [UIImage imageWithCGImage:imageRef];
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
CGImageRelease(imageRef);
_overlayView.hidden = NO;
es un pequeño truco, espero que alguien le resultará útil
Aquí está una extensión rápida de UIView
que, o bien capturar toda la vista o un marco dentro de la vista. Tiene en cuenta la escala de pantalla.
extension UIView {
func imageSnapshot() -> UIImage {
return self.imageSnapshotCroppedToFrame(nil)
}
func imageSnapshotCroppedToFrame(frame: CGRect?) -> UIImage {
let scaleFactor = UIScreen.mainScreen().scale
UIGraphicsBeginImageContextWithOptions(bounds.size, false, scaleFactor)
self.drawViewHierarchyInRect(bounds, afterScreenUpdates: true)
var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
if let frame = frame {
// UIImages are measured in points, but CGImages are measured in pixels
let scaledRect = CGRectApplyAffineTransform(frame, CGAffineTransformMakeScale(scaleFactor, scaleFactor))
if let imageRef = CGImageCreateWithImageInRect(image.CGImage, scaledRect) {
image = UIImage(CGImage: imageRef)
}
}
return image
}
}
Hola, jDutton. Me encantó tu respuesta. Decidió actualizar su código para Swift 3.0. –
¡Muchas gracias! – Jerome
SWIFT 3.0 Xcode8 Versión provienen de respuesta @jDutton y el trabajo para mí.
extension UIView {
func imageSnapshot() -> UIImage {
return self.imageSnapshotCroppedToFrame(frame: nil)
}
func imageSnapshotCroppedToFrame(frame: CGRect?) -> UIImage {
let scaleFactor = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(bounds.size, false, scaleFactor)
self.drawHierarchy(in: bounds, afterScreenUpdates: true)
var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
if let frame = frame {
// UIImages are measured in points, but CGImages are measured in pixels
let scaledRect = frame.applying(CGAffineTransform(scaleX: scaleFactor, y: scaleFactor))
if let imageRef = image.cgImage!.cropping(to: scaledRect) {
image = UIImage(cgImage: imageRef)
}
}
return image
}
}
si te estrellas y obtener el siguiente mensaje:
GContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
probar esto solution
esperanza para ahorrar su tiempo!
- 1. Cómo capturar parte de una pantalla
- 2. capturar la captura de pantalla utilizando .NET
- 3. Cómo capturar la pantalla de pygame?
- 4. Capturar firmas en una aplicación de iOS
- 5. ¿Cómo capturar la pantalla seleccionada de otra aplicación usando java?
- 6. C++ - Cómo capturar la pantalla, excepto en algunas ventanas
- 7. iOS: capturando partículas CAEmitterLayer en la pantalla
- 8. cómo identificar una notificación particular en ios sdk
- 9. Capturar la pantalla en un mapa de bits
- 10. iOS Captura parte de la pantalla
- 11. ¿Cómo obtengo una porción de una referencia de matriz?
- 12. Generar una pantalla predeterminada aleatoria en iOS
- 13. Delphi - Maximiza un formulario a una pantalla en particular
- 14. ¿Cómo reverso una parte (porción) de una lista en Python?
- 15. Cómo obtener una dimensión (porción) de una matriz multidimensional
- 16. Cómo capturar imágenes sin mostrar vista previa en iOS
- 17. Captura de pantalla de la pantalla actual
- 18. Linux, cómo capturar pantalla y simular movimientos del mouse
- 19. cortar la porción de mapa de bits
- 20. Cómo capturar una captura de pantalla en .NET desde una aplicación weba?
- 21. ¿Cómo giro la pantalla de presentación personalizada en iOS?
- 22. ¿Es posible capturar una captura de pantalla para un webelement directamente usando WebDriver?
- 23. ¿Cómo acelerar BitBlt para capturar pantalla con aero?
- 24. Apagar la pantalla en iPhone OS (iOS)
- 25. iOS: contenido reflejado en la pantalla
- 26. Cómo capturar el evento hide keyboard en iOS usando JavaScript
- 27. Cómo capturar la imagen de la pantalla con el puntero del mouse en Java
- 28. ¿Cómo modifico una porción de un vector en Clojure?
- 29. Usar la cámara del teléfono, después de capturar la actividad de la imagen no regresa a una actividad particular
- 30. PHP: ¿Cómo capturar la pantalla de la ventana del navegador con php?
¿desea capturar una captura de pantalla de su máquina o desea capturar un área en su aplicación a través del código? – mAc
@mAc obviamente quiere hacerlo con código ... si no es por eso que usa UIGraphicsBeginImageContextWithOptions – Krishnabhadra