Objective c 从AVCaptureVideoPreviewLayer获取图像
我基本上是克隆人,因为问原始海报他们是否找到了解决方案并不是一个“答案”,我还不能发表评论,因为我没有足够的声誉 我正在构建的应用程序将始终处于纵向模式,因为在这种情况下旋转并不重要。 我有一个AVCaptureSession,AVCaptureVideoPreviewLayer连接到一个大小为320x240的UIView,该UIView紧靠顶部布局指南Objective c 从AVCaptureVideoPreviewLayer获取图像,objective-c,ios7,avcapturesession,Objective C,Ios7,Avcapturesession,我基本上是克隆人,因为问原始海报他们是否找到了解决方案并不是一个“答案”,我还不能发表评论,因为我没有足够的声誉 我正在构建的应用程序将始终处于纵向模式,因为在这种情况下旋转并不重要。 我有一个AVCaptureSession,AVCaptureVideoPreviewLayer连接到一个大小为320x240的UIView,该UIView紧靠顶部布局指南 我已经捕获了输入,但是我接收到的图像是倾斜的,显示的比我显示的部分多得多。如何仅捕获我的AVCaptureVideoPreviewLayer中
我已经捕获了输入,但是我接收到的图像是倾斜的,显示的比我显示的部分多得多。如何仅捕获我的AVCaptureVideoPreviewLayer中显示的区域?请查看
AVCaptureVideoPreviewLayer
s
-(CGRect)metadataOutputRectOfInterestForRect:(CGRect)layerRect
通过此方法,可以轻松地将层的可见CGRect转换为实际相机输出
有一点需要注意:物理摄像机不是“顶面朝上”安装的,而是向右旋转90度。(因此,如果你把iPhone的Home(主页)按钮握在右边,相机实际上是朝上的)
记住这一点,您必须转换上述方法提供的CGRect,以将图像裁剪为屏幕上的图像
例如:
CGRect visibleLayerFrame = THE ACTUAL VISIBLE AREA IN THE LAYER FRAME
CGRect metaRect = [self.previewView.layer metadataOutputRectOfInterestForRect:visibleLayerFrame];
CGSize originalSize = [originalImage size];
if (UIInterfaceOrientationIsPortrait(_snapInterfaceOrientation)) {
// For portrait images, swap the size of the image because
// here, the output image is actually rotated relative to what you see on screen.
CGFloat temp = originalSize.width;
originalSize.width = originalSize.height;
originalSize.height = temp;
}
// metaRect is fractional, that's why we multiply here
CGRect cropRect;
cropRect.origin.x = metaRect.origin.x * originalSize.width;
cropRect.origin.y = metaRect.origin.y * originalSize.height;
cropRect.size.width = metaRect.size.width * originalSize.width;
cropRect.size.height = metaRect.size.height * originalSize.height;
cropRect = CGRectIntegral(cropRect);
这可能有点令人困惑,但让我真正理解这一点的是:
按住你的设备“Home Button right”->你会看到x轴实际上位于iPhone的“高度”,而y轴位于iPhone的“宽度”。这就是为什么对于肖像图像,必须交换大小;)