2017-02-15 101 views
0

我在GPUImage中使用Swift 3。我有一個名爲:lut_lookup.png的LUT圖像文件我已經成功地將它用於靜態圖像上的GPUImage,並且它使用LUT濾鏡應用並顯示結果。GPUImageVideoCamera實時預覽使用GPUImage的自定義LUT

我現在試圖將相同的LUT過濾器應用於實時相機視圖,但我似乎無法使其工作。它基本上不顯示相機。

我在下面提供了我的代碼,任何幫助將不勝感激。這可能很簡單,我錯過了/做錯了,但我似乎無法發現它。

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") 
    } 
} 
} 

感謝

回答

0

解決它。我將代碼更改爲:

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() 
     } 
    } 
} 

希望可以幫助別人!