ios - 使用 GPUImagePicture 和自定义 LUT 进行 GPUImageVideoCamera 实时预览

标签 ios swift swift3 gpuimage

我正在将 Swift 3 与 GPUImage 结合使用。我有一个名为:lut_lookup.png 的 LUT 图像文件,我已成功地将其与 GPUImage 一起在静态图像上使用,并且它使用 LUT 滤镜应用并显示结果。

我现在尝试将相同的 LUT 滤镜应用到实时摄像机 View ,但我似乎无法让它工作。它基本上甚至不显示相机。

我在下面提供了我的代码,任何帮助将不胜感激。这可能是我错过/做错的一些简单的事情,但我似乎无法发现它。

import UIKit
import GPUImage

class LiveCameraVC: UIViewController
{

// MARK: - Variables

let videoCamera: GPUImageVideoCamera? = {
    if let videoCamera = GPUImageVideoCamera(sessionPreset: AVCaptureSessionPreset640x480, cameraPosition: .back) {
        videoCamera.outputImageOrientation = .portrait
        videoCamera.horizontallyMirrorFrontFacingCamera = false
        videoCamera.horizontallyMirrorRearFacingCamera = false
        return videoCamera
    } else {
        print("GPUImageVideoCamera Nil")
        return nil
    }
}()

let filter: GPUImageLookupFilter = {
    let filter = GPUImageLookupFilter()
    filter.intensity = 1.0
    return filter
}()

// MARK: - UI

let modifiedImageView: GPUImageView = {
    let imageView = GPUImageView.newAutoLayout()
    imageView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
    imageView.isUserInteractionEnabled = true
    return imageView
}()

// MARK: - Life Cycle

override func viewDidLoad() {
    super.viewDidLoad()

    let tapGesture:UITapGestureRecognizer = UITapGestureRecognizer().bk_init { [unowned self] (sender:UIGestureRecognizer?, state:UIGestureRecognizerState, location:CGPoint) in

        print("Tapped")
        self.performLut()

        } as! UITapGestureRecognizer
    modifiedImageView.addGestureRecognizer(tapGesture)
}

override func loadView() {
    super.loadView()

    self.view.addSubview(modifiedImageView)
    modifiedImageView.autoPinEdgesToSuperviewEdges()
}

// MARK: - Private

private func performLut() {
    print("performLut")
    if let videoCamera = videoCamera {
        if let lookupImageSource = GPUImagePicture(image: UIImage(named:"lut_lookup")) {
            videoCamera.addTarget(filter, atTextureLocation: 0)
            lookupImageSource.addTarget(filter, atTextureLocation: 1)
            filter.addTarget(modifiedImageView)
            videoCamera.startCapture()
        } else {
            print("videoCamera Nil")
        }
    } else {
        print("GPUImageVideoCamera Nil")
    }
}
}

谢谢

最佳答案

解决了。我将代码更改为:

let imagePicture: GPUImagePicture? = {
    if let imagePicture = GPUImagePicture(image: UIImage(named:"lut_lookup")) {
        return imagePicture
    } else {
        print("GPUImagePicture Nil")
        return nil
    }
}()


private func performLut() {
    if let videoCamera = videoCamera {
        if let imagePicture = imagePicture {
            videoCamera.addTarget(filter)
            imagePicture.addTarget(filter)
            imagePicture.processImage()
            filter.addTarget(modifiedImageView)
            videoCamera.startCapture()
        }
    }
}

希望这对某人有帮助!

关于ios - 使用 GPUImagePicture 和自定义 LUT 进行 GPUImageVideoCamera 实时预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42248392/

相关文章:

ios - 如何在iOS的自定义图像选择器 View 中进行自动闪光

ios - 在 CoreData ios swift3 中仅获取表的几个属性

快速设置表格高度

swift - SKCameraNode.position didSet 在使用 SKAction 移动时不会被触发

ios - 以编程方式在 UICollectionViewCell 中设置布局约束

ios - Objective-C - 离开 ViewController 时 CBCentralManager NSInternalInconsistencyException

iOS Facebook 应用缩放图标

ios - 按下导航后退按钮时如何调用函数?

arrays - Swift 中 Int 数组的示例变体

iOS - 图像大小与 ImageView 大小