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 - Objective-C String(yyyy-mm-dd) 到 NSDate

ios - iOS 应用程序的通用链接 - 它是如何工作的?

ios - 如何在AppDelegate中隐藏和显示UIViewController按钮? - swift

iphone - 检测早于 3GS 的 iPhone 硬件

iphone - 如何检查设备是 LTE、3G、HSPA 还是 Wi-Fi?

ios - 如何在 iOS 的 TabView 应用程序中将数组从一个 TableView 传递到另一个?

objective-c - 比较格式为 "2.0.1"、 "2.0.09"的字符串

ios - 带垂直竖线/竖线的 Objective C URL

iphone - 建模一对多关系 Core Data

ios - 确定当 iOS 应用程序处于关闭状态时发送 LocalNotification 看到 Beacon 的事件