2009-12-13 6 views
1

Я делаю приложение камеры, которое включает в себя цифровой зум. У меня есть слайдер (zoomSlider), который имеет минимальное значение 1 и максимальное значение 4. Когда пользователь нажимает кнопку камеры, он принимает снимок, а затем я обрезаю его для масштабирования. У меня две проблемы:Обрезать UIImage от центра наружу?

Как обрезать точную середину изображения? (например, 2x увеличить, Rect будет иметь размер 600x800 (для iPhone 2G/3G))

Когда я это делаю, он поворачивает изображение. Я восполняю это, поворачивая UIImageView, в котором он находится, но это приводит к тому, что портретная картина становится пейзажной и наоборот.

Вот мой код:

- (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; 

}

ответ

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); 

Удалить это не повернуть изображение:

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

zoomPhoto.transform = rotateTransform;