Я делаю приложение камеры, которое включает в себя цифровой зум. У меня есть слайдер (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;
}