2015-05-11 16 views
2

我使用一些CIFilter來做一些圖像處理。我發現UIImageView太慢,無法實時顯示輸出圖像。我跟着documentation並且建了GLKView。現在的表現是完美的,但旋轉時圖像呈黑色矩形。CIImage的背景顏色

enter image description here

如何設置顏色爲背景(此處爲綠色)或透明?

這裏是繪製代碼片段。我根本不熟悉圖形領域。

private class ImageView: GLKView { 

    override init!(frame: CGRect, context: EAGLContext!) { // Called with `.OpenGLES3` context. 
     ciContext = CIContext(EAGLContext: context, options: [kCIContextWorkingColorSpace: NSNull()]) 
     super.init(frame: frame, context: context)  
    } 

    private let ciContext: CIContext 

    private var image: CIImage? { 
     didSet { 
      setNeedsDisplay() 
     } 
    } 

    private override func drawRect(rect: CGRect) { 

     // Clear with `glClear`... Here is set color from `backgroundColor` (green) and cleared with it. 

     if image != nil {     
      ciContext.drawImage(image!, inRect: { /* returned computed rect */ }(), fromRect: image!.extent()) 
     } 
    } 

    private override func layoutSubviews() { 
     super.layoutSubviews() 
     setNeedsDisplay() 
    } 
} 

回答

2

您是否正在設置混合模式?

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glBlendEquation(GL_FUNC_ADD); 

檢查這個link顯示的混合模式

的視覺效果。如果您要設置混合模式可以顯示更多的什麼是drawRect方法回事?

+0

我正在做類似的事情,添加上述內容後仍然存在問題。我正在使用CIAffineTransform過濾器來旋轉CIImage並獲取黑色背景。我的CIContext是從EAGLContext創建的,我將最終的圖像繪製到最終呈現爲視頻幀的CVPixelBuffer中。我已經添加了上面的OpenGL調用,但旋轉圖像外部的區域仍然是黑色的。任何想法可能需要使背景透明的其他設置?謝謝! – kleezy