想要使用AVFoundation framework在iphone摄像头中实现缩放功能吗

想要使用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

我想使用UISlider缩放相机

通过调整AVCaptureVideoPreviewLayer仿射变换,我成功地完成了这项工作

这是它的代码

-(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
方法之前,仅使用滑块的瞬时值设置一次


希望有帮助:)

亲爱的,检查一下,或者对你拍摄的图像应用相同的变换?