2015-05-11 3 views
2

Я использую некоторые из CIFilter s для выполнения некоторой обработки изображений. Я нашел 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