我正在将 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/