想要使用AVFoundation框架在iphone相机中进行缩放功能
发布时间:2020-12-14 19:33:37 所属栏目:百科 来源:网络整理
导读:我想使用UISlider缩放相机. 我通过调整AVCaptureVideoPreviewLayer的AffineTransform成功完成了它. 这是代码 -(void)sliderAction:(UISlider*)sender{ CGAffineTransform affineTransform = CGAffineTransformMakeTranslation(sender.value,sender.value); a
我想使用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,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方法之前仅使用滑块的瞬时值设置一次. 希望能帮助到你 :) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |