2013-03-29 84 views
7

我使用AVFoundation框架来显示来自相机的视频。AVFoundation相机变焦

我如何使用它的代码是平常:

session = [[AVCaptureSession alloc] init] ; 
... 
captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; 
... 
[cameraView.layer addSublayer:captureVideoPreviewLayer]; 
... 

所以我想缩放功能添加到相机。

我发现2个解决方案如何实现缩放。

首先:是使用CGAffineTransform

cameraView.transform = CGAffineTransformMakeScale(x,y);

:是把在滚动视图cameraView,设置最大值和最小值滚动并将此视图缩放视图。

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return cameraView; 
} 

什么是缩放更好的性能和质量的最佳方式是什么?还有其他解决方案可以进行缩放吗?也许我错过了一些AVFoundation缩放方法。

谢谢。

+0

我希望得到一个真正的专家的意见,但由于没有人插话,我以为我会分享我的经验。由于没有真正的机械变焦,所以它只是玩高宽比。我发现在使用CGAffineTransform工作得很好的图层时,尤其是在创建会话时设置AVCaptureVideoPreviewLayer.videoGravity设置时。将变换与滑块或捏合手势链接起来非常简单。如果将帧设置为视图边界,该变换甚至可以处理奇数帧大小。希望有所帮助。 – CocoaEv

+0

谢谢你的回答,我想实现使用变换的缩放,但我花了很少的时间使它使用scrollview缩放,效果很好:)我想问这个问题,也许AV框架有缩放的东西。 –

+0

滚动视图的好提示。我也要检查一下。 – CocoaEv

回答

6

那么实际上有一个GCFloatsetVideoScaleandCropFactor

你可以找到文档here

我不确定这是否仅用于静止图像输出,但我一直在努力,如果将其设置为手势或滑块并让它控制浮动,它会表现良好。

你可以找到它的演示here

好东西。我试图循环它,所以我可以创建一个缩放条形码扫描仪。尽管哈哈,即使做什么也很粗鲁。

+2

videoScaleAndCropFactor不适用于视频。 videoMaxScaleAndCropFactor设置为1.0,如果更改videoScaleAndCropFactor,则会引发异常。 –

+0

@Nathan Kellert我没有得到AVCaptureSession属性VideoScaleandCropFactor ,,你可以解释如何实现缩放视频(不缩放视频视图)...? –

+0

视频比例和裁剪因子是实际视频本身的缩放比例。不像以前开发者使用的方法这是1)捕捉视频2)缩放3)基于新的缩放比例(这会导致像素化)重新捕捉视频。新的ios 7的东西实际上首先放大视频,然后以全分辨率拍摄。您基本上想要设置视图缩放,以便观看者可以在屏幕上看到视频实际捕获的相同内容。否则,视频可能会捕捉放大的视频,但屏幕看起来完全正常。真的演示应用程序做了很多,以帮助显示它的工作原理。 –