【发布时间】:2014-01-27 11:58:50
【问题描述】:
我有一个 AVCaptureSession 的实现,我的目标是让用户拍照并只保存红色方形边框内的部分图像,如下所示:
AVCaptureSession 的previewLayer(相机)从(0,0)(左上角)到我的相机控制栏底部(包含快门的视图上方的栏)。我的导航栏和控制栏是半透明的,所以相机可以通过。
我使用[captureSession setSessionPreset:AVCaptureSessionPresetPhoto]; 来确保保存到相机胶卷的原始图像就像苹果的相机一样。
用户将可以纵向、左右横向拍摄照片,因此裁剪方法必须考虑到这一点。
到目前为止,我已经尝试使用以下代码裁剪原始图像:
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 像素的空白,这可能是因为我的 CGRect 的 y 位置。
这是我对CGRect 的日志输出:
Image crop rect: (0.000000, 53.000000, 320.000000, 322.000000)
这也描述了superview中红色边框的view的frame。
我忽略了一些重要的事情吗?
附:原始图像尺寸(使用相机在纵向模式下拍摄)为:
Original image size: (2448.000000, 3264.000000)
【问题讨论】:
标签: ios uiimage crop image-resizing cgrect