2017-02-15 3 views
0

GPUImage에서 Swift 3을 사용하고 있습니다. 나는 LUT 이미지 파일을 가지고있다 : lut_lookup.png 나는 GPUImage와 함께 이것을 정지 영상에 성공적으로 사용했고 LUT 필터를 사용하여 그 결과를 적용하고 표시한다.GPUImageVideoCamera GPUImagePicture를 사용하여 맞춤 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() 
     } 
    } 
} 

그 사람에게 도움이되기를 바랍니다.

관련 문제