Captura de pantalla de iOS parte de la pantalla

Tengo una aplicación que toma una captura de pantalla de un UIImageView con el siguiente código:

-(IBAction) screenShot: (id) sender{ UIGraphicsBeginImageContext(sshot.frame.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(viewImage,nil, nil, nil); } 

Esto funciona bien pero necesito poder posicionarme donde tomo la captura de pantalla, básicamente necesito graduar solo un tercio de la pantalla (parte central). Intenté usar

 UIGraphicsBeginImageContext(CGSize 150,150); 

Pero he descubierto que todo se toma a partir de las coordenadas 0,0, ¿alguien tiene alguna idea de cómo posicionar esto correctamente?

Bueno, la captura de pantalla se toma de un canvas que dibuja. Entonces, en lugar de dibujar la capa en todo el contexto, con una referencia a la esquina superior izquierda, la dibujará donde desee tomar la captura de pantalla ….

 //first we will make an UIImage from your view UIGraphicsBeginImageContext(self.view.bounds.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *sourceImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); //now we will position the image, X/Y away from top left corner to get the portion we want UIGraphicsBeginImageContext(sshot.frame.size); [sourceImage drawAtPoint:CGPointMake(-50, -100)]; UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(croppedImage,nil, nil, nil); 

De esto

 UIGraphicsBeginImageContext(sshot.frame.size); CGContextRef c = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(c, 150, 150); // < -- shift everything up to required position when drawing. [self.view.layer renderInContext:c]; UIImage* viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil); 

Utilice este método para recortar si tiene una imagen con rectificación exacta para recortar:

 -(UIImage *)cropImage:(UIImage *)image rect:(CGRect)cropRect { CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect); UIImage *img = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); return img; } 

Use esto:

 UIImage *img = [self cropImage:viewImage rect:CGRectMake(150,150,100,100)]; //example 

Si lo desea, puede referir este código.

En este ejemplo, puede obtener la imagen cubierta por el rect desde cualquier posición y cualquier escala de zoom.

Happy Coding 🙂

Algunos códigos extraídos para referencia son los siguientes

Función principal o código utilizado para recortar la foto

 - (UIImage *) croppedPhoto { CGFloat ox = self.scrollView.contentOffset.x; CGFloat oy = self.scrollView.contentOffset.y; CGFloat zoomScale = self.scrollView.zoomScale; CGFloat cx = (ox + self.cropRectangleButton.frame.origin.x + 15.0f) * 2.0f / zoomScale; CGFloat cy = (oy + self.cropRectangleButton.frame.origin.y + 15.0f) * 2.0f / zoomScale; CGFloat cw = 300.0f / zoomScale; CGFloat ch = 300.0f / zoomScale; CGRect cropRect = CGRectMake(cx, cy, cw, ch); NSLog(@"---------- cropRect: %@", NSStringFromCGRect(cropRect)); NSLog(@"--- self.photo.size: %@", NSStringFromCGSize(self.photo.size)); CGImageRef imageRef = CGImageCreateWithImageInRect([self.photo CGImage], cropRect); UIImage *result = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); NSLog(@"------- result.size: %@", NSStringFromCGSize(result.size)); return result; } 

Los detalles sobre cómo usar el ejemplo se dan aquí .

Disfruta de la encoding 🙂