我正在使用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 蒙版。蒙版应首先使用自定义文本颜色着色,然后呈现在背景上。