【发布时间】:2014-01-11 11:13:09
【问题描述】:
我正经历着噩梦般的时光,试图将使用 AVFoundation captureStillImageAsynchronouslyFromConnection 拍摄的照片校正为屏幕上显示的大小和方向。
我用这段代码显示AVCaptureVideoPreviewLayer,以确保它在所有旋转中显示正确的方式:
previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
previewLayer.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
if ([[previewLayer connection] isVideoOrientationSupported])
{
[[previewLayer connection] setVideoOrientation:(AVCaptureVideoOrientation)[UIApplication sharedApplication].statusBarOrientation];
}
[self.view.layer insertSublayer:previewLayer atIndex:0];
现在,当我有一个返回的图像时,它需要裁剪,因为它比显示的要大得多。
我知道有很多 UIImage 裁剪示例,但我似乎遇到的第一个障碍是找到正确的 CGRect 来使用。当我简单地裁剪到 self.view.frame 时,图像被裁剪到错误的位置。
预览使用AVLayerVideoGravityResizeAspectFill,我的UIImageView也设置为AspectFill
那么我怎样才能从预览层获得AVFoundation 在屏幕上显示的正确帧?
编辑----
这是我面临的问题的一个示例。使用 iPad Mini 的前置摄像头,摄像头使用分辨率 720x1280,但显示屏为 768x0124。视图显示了这一点(参见图片顶部的墙板:
然后当我拍摄图像并显示它时,它看起来像这样:
显然相机显示在视图的中心,但裁剪后的图像是从照片的顶部(看不到)部分拍摄的。
【问题讨论】:
标签: ios uiimage avfoundation avcapturesession