Обрезать изображение до квадрата в соответствии с размером UIView / CGRect

У меня есть реализация AVCaptureSession, и моя цель состоит в том, чтобы пользователь сделал фотографию и сохранил только часть изображения в пределах границы красного квадрата, как показано ниже:

AVCaptureSession-хpreviewLayer (камера) простирается от(0,0) (вверху слева) в нижней части панели управления моей камерой (панель чуть выше вида с затвором). Моя панель навигации и панель управления полупрозрачны, поэтому камера может просвечивать.

я использую[captureSession setSessionPreset:AVCaptureSessionPresetPhoto]; чтобы исходное изображение, сохраняемое в рулоне камеры, было похоже на камеру Apple.

Пользователь сможет сделать снимок в портретной, альбомной и правой ориентации, поэтому метод обрезки должен учитывать это.

До сих пор я пытался обрезать исходное изображение с помощью этого кода:

DDLogVerbose(@"%@: Image crop rect: (%f, %f, %f, %f)", THIS_FILE, self.imageCropRect.origin.x, self.imageCropRect.origin.y, self.imageCropRect.size.width, self.imageCropRect.size.height);

// Create new image context (retina safe)
UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.imageCropRect.size.width, self.imageCropRect.size.width), NO, 0.0);

// Create rect for image
CGRect rect = self.imageCropRect;

// Draw the image into the rect
[self.captureManager.stillImage drawInRect:rect];

// Saving the image, ending image context
UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext();

Однако, когда я смотрю на обрезанное изображение в рулоне камеры, кажется, что оно только раздавило исходное изображение, а не отбросило верхнюю и нижнюю части изображения, как хотелось бы. Это также приводит к появлению 53 пикселей белого пространства в верхней части «обрезанного» изображения, вероятно из-за положения y моегоCGRect.

Это мой вывод журнала дляCGRect:

 Image crop rect: (0.000000, 53.000000, 320.000000, 322.000000)

Это также описывает кадр с красной рамкой в суперпредставлении.

Есть ли что-то важное, что я упускаю из виду?

Постскриптум Исходный размер изображения (снятый камерой в портретном режиме):

Original image size: (2448.000000, 3264.000000)

Ответы на вопрос(3)

Ваш ответ на вопрос