2016-06-15 9 views
4

Ich versuche eine GLIKit View zu verwenden, um ein Bild zu ändern. Die Klasse, die ich bis jetzt habe funktioniert gut alle CIFilters abgesehen von der CILineOverlay es macht eine schwarze Ansicht. Wenn ich einen anderen Effekt verwende, funktioniert es gut.Swift - GLKit View CIFilter Image

Warum wird CILineOverlay nicht angezeigt?

class ImageView: GLKView { 
    let clampFilter = CIFilter(name: "CIAffineClamp")! 
    let blurFilter = CIFilter(name: "CILineOverlay")! 
    let ciContext:CIContext 

    override init(frame: CGRect) { 
     let glContext = EAGLContext(API: .OpenGLES2) 
     ciContext = CIContext(
      EAGLContext: glContext, 
      options: [ 
       kCIContextWorkingColorSpace: NSNull() 
      ] 
     ) 
     super.init(frame: frame, context: glContext) 
     enableSetNeedsDisplay = true 
    } 

    required init(coder aDecoder: NSCoder) { 
     let glContext = EAGLContext(API: .OpenGLES2) 
     ciContext = CIContext(
      EAGLContext: glContext, 
      options: [ 
       kCIContextWorkingColorSpace: NSNull() 
      ] 
     ) 
     super.init(coder: aDecoder)! 
     context = glContext 
     enableSetNeedsDisplay = true 
    } 

    @IBInspectable var inputImage: UIImage? { 
     didSet { 
      inputCIImage = inputImage.map { CIImage(image: $0)! } 
     } 
    } 

    @IBInspectable var blurRadius: Float = 0 { 
     didSet { 
      //blurFilter.setValue(blurRadius, forKey: "inputIntensity") 
      setNeedsDisplay() 
     } 
    } 

    var inputCIImage: CIImage? { 
     didSet { setNeedsDisplay() } 
    } 

    override func drawRect(rect: CGRect) { 
     if let inputCIImage = inputCIImage { 
      clampFilter.setValue(inputCIImage, forKey: kCIInputImageKey) 
      blurFilter.setValue(clampFilter.outputImage!, forKey: kCIInputImageKey) 
      let rect = CGRect(x: 0, y: 0, width: drawableWidth, height: drawableHeight) 
      ciContext.drawImage(blurFilter.outputImage!, inRect: rect, fromRect: inputCIImage.extent) 
     } 
    } 
} 

Antwort

4

Die Apple Docs besagt "Die Teile des Bildes, die nicht umrissen sind, sind transparent." - Das bedeutet, dass Sie schwarze Linien über einen schwarzen Hintergrund zeichnen. Sie können einfach die Ausgabe vom Filter über einen weißen Hintergrund zusammenfügen, um die Linien erscheinen zu lassen:

+0

So offensichtlich, aber zur gleichen Zeit nicht. Vielen Dank! – StuartM