2017-12-18 4 views
0

두 이미지를 CIFilter과 결합하는 데 문제가 있습니다. 여기서 뭐가 잘못 됐어?UIImageView에서 두 개의 CIImages와 디스플레이 문제가 발생했습니다.

아래의 코드는 UIImageView을 생성하고 뷰에 추가, 다음 CIFilter 두 이미지 imageAimageB 결합하고 UIImageView 컴포지트 출력한다.

그러나 결합 된 이미지는 UIImageView에 표시되지 않으며 공백으로 남습니다.


질문 :

  1. UIImageView에 합성 이미지를 표시 할 수있는 올바른 코드는 무엇입니까?
  2. 두 이미지를 CIFilter과 결합하는 더 효과적인 방법이 있습니까?

코드 : 난 항상 똑바로 UIImage < < >>CIImage 전환이 문제를 했어

let imageView = UIImageView() 
    imageView.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height) 
    imageView.contentMode = .Center 
    view.addSubview(imageView) 

    let imageA = CIImage(image: UIImage(named:"imageA")!) 
    let imageB = CIImage(image: UIImage(named:"imageB")!) 
    let imageFilter = CIFilter(name: "CIAdditionCompositing")! 

    imageFilter.setValue(imageA, forKey: kCIInputImageKey) 
    imageFilter.setValue(imageB, forKey: kCIInputBackgroundImageKey) 

    if let imageCombined = imageFilter.outputImage { 
     let image = UIImage(CIImage: imageCombined) 
     imageView.image = image 
    } 
+0

수행 한 디버깅이 코드는 이미지를 설정하는 행까지 도달합니까? 보기의'image' 속성은 무엇입니까? – rmaddy

+0

@rmaddy 예, 코드가 이미지 속성으로 실행됩니다. 오류가 없습니다. – user4806509

답변

1

. 당신은 당신이 작업 할 수있는 프레임/크기/정도가있는 경우, 나는 CIContext를 사용하여 작성 좋습니다 CGImage 첫째 : 당신이이 작업을 수행 할 필요가 그래서 만약

let ciContext = CIContext(options: nil) 
let cgImg = ciContext.createCGImage(imageCombined, from: imageCombined.extent) 
let uiImage = UIImage(cgImage: cgImg!) 

가하는 CIContext 만들기 "비용"이라는 것을 기억 여러 개의 이미지를 만들고 하나를 만들어 모든 렌더링에 사용하십시오. 또한 GLKView 어딘가를 사용하는 경우 컨텍스트를 사용하십시오.

# 2 번 질문에 대한 귀하의 코드는 정상적으로 보입니다. "코드 행을 결합 할 수는 있지만 성능에는 영향을 미치지 않습니다 .CoreImage는 필터의 outputImage을 호출 할 때까지는 아무 것도 처리하지 않습니다 ..

+0

감사합니다. @dfd. 곧바로 UIImage << >> CIImage 변환으로 인해 몇 가지 문제가 발생할 수있는 특별한 이유가 있습니다. 더 나은 성능을위한 이미지를 결합하는 더 나은 최적화 된 방법이 있습니까? – user4806509

+0

왜 직선 변환이 벗겨 지는지 나는 솔직히 모르겠습니다. 나는 항상 위의 방법을 사용했습니다. 즉, GLKView ', 아주 좋은 성능 현명한입니다. 당신은 (입력 매개 변수에 연결된 슬라이더와 함께 이것을 사용할 수 있습니다 eters)를 사용하여 "실시간"필터 렌더링을 구현합니다. 그런 다음 필요할 때만 'UIImage'로 변환하십시오. 기억해야 할 한 가지 - CoreImage (및 GLKViews)는 GPU를 사용하도록 최적화되어 있습니다. 시뮬레이터 **에서 테스트하면 ** 성능이 떨어집니다. 성능 문제가 있다고 생각하기 전에 실제 기기에서 사용해보십시오. – dfd

+0

그 설명에 대해 대단히 감사합니다. – user4806509

관련 문제