Обрезать изображение до квадрата в соответствии с размером 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)