iphone - 想要使用 AVFoundation 框架在 iPhone 相机中使用缩放功能

标签 iphone ios objective-c xcode avfoundation

我想使用 UISlider 缩放相机。

我通过调整AVCaptureVideoPreviewLayerAffineTransform成功做到了。

代码如下

-(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];
}

但是当我捕获它时,我得到的是非缩放的图像对象。

最佳答案

回复有点晚了。但我正在回复以备将来引用。 实际上,您在代码中所做的只是更改了预览层的缩放系数,而不是底层输出连接。但是要使缩放最初反射(reflect)在捕获的输出上,您还必须将这个因素也放在输出连接中。您可以使用类似于以下内容的内容:

-(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 更改,而应将代码放在原始捕获例程中,并使用 slider 的瞬时值,就在调用 captureStillImageAsynchronouslyFromConnection 方法之前。

希望对您有所帮助:)

关于iphone - 想要使用 AVFoundation 框架在 iPhone 相机中使用缩放功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17564536/

相关文章:

iphone - Mac 中的 Git 问题( fatal error )

iphone - 不同的 NSNumberFormatter 行为

ios - flutter : IOS to IOS Broadcast Beacon not working

objective-c - NSPopUpButton 占位符值?

objective-c - Xcode 6.4 Swift 单元测试无法编译 : "GPUImage.h not found" "failed to import bridging header"

ios - Cocos2d : how to share player data between scenes

iphone - 磁盘缓存与重新创建镜像

ios - 此类对于键 itemname 不符合键值编码

ios - 使用动画显示颜色序列(Swift)

ios - ObjC/iOS - 大写每个单词的首字母而不修改其他字母