[英]want zooming functionality in iphone camera using AVFoundation framework
我想使用UISlider缩放相机。
我通过调整AVCaptureVideoPreviewLayer的AffineTransform成功完成了它。
这是代码
-(void)sliderAction:(UISlider*)sender{
CGAffineTransform affineTransform = CGAffineTransformMakeTranslation(sender.value, sender.value);
affineTransform = CGAffineTransformScale(affineTransform, sender.value, sender.value);
affineTransform = CGAffineTransformRotate(affineTransform, 0);
[CATransaction begin];
[CATransaction setAnimationDuration:.025];
//previewLayer is object of AVCaptureVideoPreviewLayer
[[[self captureManager]previewLayer] setAffineTransform:affineTransform];
[CATransaction commit];
}
但是当我捕捉到它时,我会得到非缩放的图像对象。
回复有点迟了。 但我正在回复以供将来参考。 实际上,您在代码中所做的只是您已经更改了预览图层的缩放系数而不是基础输出连接。 但是,要使缩放最初反映在捕获的输出上,您必须将该因子也放在输出连接中。 你可以使用类似下面的东西:
-(void)sliderAction:(UISlider*)sender
{
AVCaptureConnection* connection = [self.photoOutput connectionWithMediaType:AVMediaTypeVideo]; // photoOutput is a AVCaptureStillImageOutput object, representing a capture session output with customized preset
CGAffineTransform affineTransform = CGAffineTransformMakeTranslation(sender.value, sender.value);
affineTransform = CGAffineTransformScale(affineTransform, sender.value, sender.value);
affineTransform = CGAffineTransformRotate(affineTransform, 0);
[CATransaction begin];
[CATransaction setAnimationDuration:.025];
//previewLayer is object of AVCaptureVideoPreviewLayer
[[[self captureManager]previewLayer] setAffineTransform:affineTransform];
if (connection) {
connection.videoScaleAndCropFactor = sender.value;
}
[CATransaction commit];
}
它应该做的伎俩。
理想情况下,您不应在Slider
例程中执行connection.videoScaleAndCropFactor
更改,并且应该将代码放在原始捕获例程中,并在调用captureStillImageAsynchronouslyFromConnection
方法之前将其设置为仅使用滑块的瞬时值。
希望能帮助到你 :)
首先,您的代码仅缩放图层内容而不是CMSampleBuffer
。 您接下来的工作是在CMSampleBuffer
上对CVPixelBuffer
进行缩放,并将缩放的CMSampleBuffer
保存到AVWriter
。 您可以使用Accelerate.framework来缩放CVPixelBuffer
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.