Обрезать изображение с помощью CGRect

Я пытаюсь сделать это с незапамятных времен. У меня есть наложение камеры. Я хочу, чтобы мое окончательное изображение было частью изображения, видимого со встроенной камеры. Я сделал CGRect с размерами, равными квадрату в камере. Затем я попытался обрезать его с помощью этой функции.

- (UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{
    CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);

    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);

    return croppedImage;
}

Я назвал это так

CGRect rect = CGRectMake(10, 72, 300, 300);

UIImage *realImage = [self imageByCropping:[self.capturedImages objectAtIndex:0] toRect:rect];

Я получаю изображение плохого качества с неправильной ориентацией.

::РЕДАКТИРОВАТЬ::

С ответом Нитина я могу обрезать правильную часть экрана, но проблема в том, что он обрезает вид, следующий за видом с камеры, "вид подтверждения". Я подозреваю, что это потому, что код Нитина использует

UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();

и потому что ViewController, в котором все это происходит, потому что View Controller для Confirmation View является контроллером, в котором выполняется этот код. Я попытаюсь объяснить это небольшой картой

CameraOverlay.xib(он использует этот xib для создания наложения) <===== CameraOverlayViewController ---------> ConfirmationView

Поэтому, когда сначала вызывается ViewController (кнопка на панели вкладок), он открывает камеру (UIImagePickerController) с наложением поверх нее. Затем, когда пользователь щелкает изображение, оно отображается в ConfirmationView.

То, что я думаю, происходит, когда UIGraphicsBeginImageContextWithOptions(self.view.frame.size, YES, 1.0);[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); эти строки выполняются, View в это время - ConfirmationView.

Примечание: я вызываю функцию в

(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info метод.

1 ответ

См. Руководство по рисованию и печати.

Система координат по умолчанию отличается между CoreGraphics и UIKit. Я думаю, что ваша проблема из-за этого факта.

Их использование может помочь вам решить проблему

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context , 0.0, rect.size.height);
CGContextScaleCTM(context , 1.0, -1.0);
Другие вопросы по тегам