Recorta UIImage desde un UIImageView transformado

Estoy permitiendo que el usuario capture una image de la camera o eligiendo una de la biblioteca. Esta image se muestra en UIImageView . El usuario ahora puede escalar y posicionar la image dentro de un cuadro delimitador, exactamente como lo haría usando UIImagePickerController cuando allowsEditing que la allowsEditing se establezca en YES .

Cuando el usuario está satisfecho con el resultado y hace clic en Hecho, me gustaría producir un recortado UIImage . El problema surge al usar CGImageCreateWithImageInRect ya que esto no toma en count la escala. La transformación se aplica a imageView así:

 CGAffineTransform transform = CGAffineTransformScale(self.imageView.transform, newScale, newScale); [self.imageView setTransform:transform]; 

Usando un gestureRecognizer.

Supongo que lo que está sucediendo es; UIImageView se escala y se mueve, luego aplica UIViewContentModeScaleAspectFit a UIImage se retiene y cuando le pido que recorte la image, hace exactamente eso, sin importar el posicionamiento de escala. La razón por la que pienso esto, es que si no escalar o mover la image, simplemente toque Listo de inmediato, el recorte funciona.

Recorto la image de esta manera:

 - (UIImage *)cropImage:(UIImage*) img toRect:(CGRect)rect { CGFloat scale = [[UIScreen mainScreen] scale]; if (scale>1.0) { rect = CGRectMake(rect.origin.x*scale , rect.origin.y*scale, rect.size.width*scale, rect.size.height*scale); } CGImageRef imageRef = CGImageCreateWithImageInRect([img CGImage], rect); UIImage *result = [UIImage imageWithCGImage:imageRef scale:self.imageView.image.scale orientation:self.imageView.image.imageOrientation]; // UIImage *result = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); return result; } 

Pasar en un cropRect desde una vista que es una subView de mi vista principal (el cuadro de superposition cuadrado, como en UIImagePickerController). Main UIView tiene una UIImageView que se escala y una UIView que muestra el rectángulo de la cosecha.

¿Cómo puedo get el cultivo "lo que ves es lo que obtienes" y qué factores debo tener en count? O tal vez sugerencias si debería implementar la jerarquía o escalar de manera diferente.

Prueba un truco simple. Apple tiene muestras en su sitio para mostrar cómo hacer zoom en una foto usando el código. Una vez hecho el zoom, utilizando el context gráfico, tome el tamaño de marco de la vista delimitadora y tome la image con eso. Por ejemplo, Uiview contiene vista de desplazamiento que tiene la image ampliada. Entonces, el scrollview hace zoom y también lo hace su image, ahora toma el tamaño de marco de su UIview delimitadora, y crea un context de image y luego lo guarda como una nueva image. Dime si eso tiene sentido.

Saludos 🙂