2009-12-13 5 views
1

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; 

}

Répondre

1
CGFloat newWidth = image.size.width/zoomSlider.value; 
CGFloat newHeight = image.size.height/zoomSlider.value; 

CGRect clippedRect = CGRectMake((image.size.width-newWidth)/2, (image.size.height-newHeight)/2, newWidth, newHeight); 

Retirez ce pour ne pas faire pivoter l'image:

CGAffineTransform rotateTransform = CGAffineTransformRotate(CGAffineTransformIdentity,RADIANS(90.0)); 

zoomPhoto.transform = rotateTransform;