我正在尝试在 iOS 上使用 CoreText 来渲染 OpenGL 纹理。CoreText 在 CoreGraphics 位图上下文中呈现,然后使用glTexImage2D
.
当我使用 RGB 颜色空间创建位图上下文时,一切正常
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
uint8_t *data = (uint8_t *)calloc(height, 4 * width);
CGContextRef context = CGBitmapContextCreate(data, width, height, 8, 4 * width, colorSpace, kCGImageAlphaNoneSkipLast);
CGColorSpaceRelease(colorSpace);
但是,我想只使用灰度色彩空间。当我这样做时,文本不会出现。
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
uint8_t *data = (uint8_t *)calloc(height, width);
CGContextRef context = CGBitmapContextCreate(data, width, height, 8, width, colorSpace, kCGImageAlphaNone);
CGColorSpaceRelease(colorSpace);
我正在渲染的文本是黑色的。在这两种情况下,我都可以使用 CoreGraphics 方法在上下文中绘制。
我使用以下代码绘制文本:
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)text);
CGSize dimensions = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, [text length]), NULL, CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX), NULL);
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, dimensions.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGRect box = CGRectMake(0, 0, dimensions.width, dimensions.height);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, box );
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, [text length]), path, NULL);
CTFrameDraw(frame, context);
CFRelease(frame);
CFRelease(path);
CFRelease(framesetter);
CoreText 中是否有特殊设置来完成这项工作?
谢谢