Je fais une application de la caméra qui comprend le zoom numérique. J'ai un curseur (zoomSlider) qui a une valeur minimale de 1 et une valeur maximale de 4. Lorsque l'utilisateur appuie sur le bouton de l'appareil photo, il prend une photo, puis je recadrer pour le zoom. J'ai deux problèmes:Crop un UIImage du Centre vers l'extérieur?
Comment est-ce que je recadre le milieu exact de l'image? (par exemple, zoom 2x, Rect serait centré avec des dimensions de 600x800 (pour iPhone 2G/3G))
Lorsque je fais cela, il fait pivoter l'image. Je me rattrape en tournant le UIImageView, mais cela fait que l'image portrait devient paysage et vice versa.
Voici mon code:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
if ([mediaType isEqualToString:@"public.image"]){
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
CGRect clippedRect = CGRectMake(600, 450, image.size.width/zoomSlider.value, image.size.height/zoomSlider.value);
UIImage *cropped = [self imageByCropping:image toRect:clippedRect];
CGRect croppedImageSize = CGRectMake(0, 0, image.size.width/zoomSlider.value, image.size.height/zoomSlider.value);
[cropped drawInRect:croppedImageSize];
zoomPhoto.frame = croppedImageSize;
zoomPhoto.image = cropped;
CGAffineTransform rotateTransform = CGAffineTransformRotate(CGAffineTransformIdentity,
RADIANS(90.0));
zoomPhoto.transform = rotateTransform;
}
- (UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{
CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return cropped;
}