想要使用AVFoundation framework在iphone摄像头中实现缩放功能吗
我想使用UISlider缩放相机 通过调整AVCaptureVideoPreviewLayer的仿射变换,我成功地完成了这项工作 这是它的代码想要使用AVFoundation framework在iphone摄像头中实现缩放功能吗,iphone,ios,objective-c,xcode,avfoundation,Iphone,Ios,Objective C,Xcode,Avfoundation,我想使用UISlider缩放相机 通过调整AVCaptureVideoPreviewLayer的仿射变换,我成功地完成了这项工作 这是它的代码 -(void)sliderAction:(UISlider*)sender{ CGAffineTransform affineTransform = CGAffineTransformMakeTranslation(sender.value, sender.value); affineTransform = CGAffineTransfo
-(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];
}
但是当我捕获它时,我得到的是未缩放的图像对象。首先,您的代码只缩放图层内容,而不是
CMSampleBuffer
。下一个解决方法是从CMSampleBuffer
对CVPixelBuffer
进行缩放,并将缩放后的CMSampleBuffer
保存到AVWriter
。您可以使用缩放CVPixelBuffer
回复有点晚了。但我的答复是供将来参考。
实际上,您在代码中所做的只是更改了预览层的缩放因子,而不是底层的输出连接。但是,要使缩放最初反映在捕获的输出上,还必须在输出连接中加入因子。您可以使用类似于以下内容的内容:
-(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
例程中执行连接。videoScaleAndCropFactor
更改,应该将代码放在原始捕获例程中,并在调用CaptureStillImageAsynchronously fromConnection
方法之前,仅使用滑块的瞬时值设置一次
希望有帮助:)亲爱的,检查一下,或者对你拍摄的图像应用相同的变换?