0

我正在使用FreeType渲染 lcd 字形,并使用以下代码将结果数据转换为 RGB 图像。

var lcdDecode: [CGFloat] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0]

let bitmapInfo = CGBitmapInfo(rawValue: CGBitmapInfo.byteOrder32Little.rawValue
                                      | CGImageAlphaInfo.none.rawValue)

let dataProvider = CGDataProvider(dataInfo: nil,
                                  data: bitmap.pointee.buffer!,
                                  size: Int(bitmap.pointee.pitch)
                                      * Int(bitmap.pointee.rows),
                              releaseData: { (info, data, size) in })
            
let image = CGImage(width: Int(bitmap.pointee.width) / 3,
                    height: Int(bitmap.pointee.rows),
                    bitsPerComponent: 8,
                    bitsPerPixel: 24,
                    bytesPerRow: Int(bitmap.pointee.pitch),
                    space: CGColorSpaceCreateDeviceRGB(),
                    bitmapInfo: bitmapInfo,
                    provider: dataProvider!,
                    decode: &lcdDecode,
                    shouldInterpolate: false,
                    intent: .defaultIntent)

问题是,由于它们的性质是不透明的,我无法在CGContext上渲染这些用自定义颜色着色并相互叠加的图像。

实际上,图像是一个掩码,其中每个像素代表红色、绿色和蓝色的各个 alpha 值。灰度蒙版可以很容易地用任何颜色着色并呈现为透明图像。然而,在亚像素RGB 掩码的情况下,这是不可能的。

所以我想知道是否有办法实现这种与CIImage的混合?

我有三个输入。背景、色调颜色和 RGB 蒙版。蒙版应首先使用自定义文本颜色着色,然后呈现在背景上。

4

0 回答 0