Цвет фона для рисования CIImage

Я использую некоторые из CIFilter для обработки изображений. Я обнаружил, что UIImageView слишком медленный для отображения выходного изображения в реальном времени. Я следил за документацию и построил GLKView. Теперь производительность идеальна, но изображение отображается черным прямоугольником при вращении.

введите здесь описание изображения

Как установить этот цвет на фон (в данном случае зеленый) или прозрачный?

Вот фрагмент кода рисования. Я вообще не знаком с графической областью.

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()
    }
}

person Stanislav Smida    schedule 11.05.2015    source источник


Ответы (1)


Вы устанавливаете режим наложения?

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

Перейдите по этой ссылке, чтобы увидеть визуальные эффекты режима наложения.

Если вы устанавливаете режим наложения, можете ли вы показать больше того, что происходит в методе drawRect?

person Iain Smith    schedule 11.05.2015
comment
Я делаю что-то подобное и все еще имею проблемы после добавления выше. Я использую фильтр CIAffineTransform для поворота CIImage и получения черного фона. Мой CIContext создается из EAGLContext, и я рисую окончательное изображение в CVPixelBuffer, которое в конечном итоге отображается как видеокадр. Я добавил вышеуказанные вызовы OpenGL, но область за пределами повернутого изображения по-прежнему черная. Любые мысли о других настройках, которые мне могут понадобиться, чтобы сделать фон прозрачным? Спасибо! - person Clay Garrett; 10.12.2016