绘制CIImage的背景颜色

3

我使用了一些 CIFilter 进行图像处理。我发现 UIImageView 在实时显示输出图像时速度太慢了。我按照 文档 中的说明构建了 GLKView。现在表现非常出色,但当旋转图像时,图像呈黑色矩形。

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()
    }
}
1个回答

2

您正在设置混合模式吗?

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

请查看此链接以展示混合模式的视觉效果。

如果您设置了混合模式,是否可以在drawRect方法中显示更多信息?


我正在做类似的事情,但在添加上述内容后仍然存在问题。我正在使用CIAffineTransform滤镜旋转CIImage并获得黑色背景。我的CIContext是从EAGLContext创建的,并且我将最终图像绘制到CVPixelBuffer中,最终呈现为视频帧。我已经添加了上述OpenGL调用,但旋转图像外部的区域仍然是黑色的。您有没有其他设置使背景透明的想法?谢谢! - Clay Garrett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接