我正在尝试在iOS上使用CoreText来渲染OpenGL纹理。
CoreText在CoreGraphics Bitmap上下文中呈现,然后使用glTexImage2D
在OpenGL中加载。
当我使用RGB颜色空间创建位图上下文时,evertyhing工作正常
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方法在上下文中绘制。
我使用fllowing代码绘制文本:
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中是否有特殊设置才能使其正常工作?
由于
答案 0 :(得分:0)
好的,我设法重现了这个问题。在NSAttributeString属性字典中,不应使用UIColor(NSColor?),而应使用CGColorRef。这样,CGContext
API将知道如何根据颜色空间处理颜色。如果您只是执行以下操作,那么您应该可以继续。
CGColorRef col = [UIColor blackColor].CGColor;
NSDictionary *attributesDict = [NSDictionary dictionaryWithObjectsAndKeys:
//whatever attributes you need
col, kCTForegroundColorAttributeName,
nil];
NSAttributedString *stringToDraw = [[NSAttributedString alloc] initWithString:yourText
attributes:attributesDict];
我希望这有帮助,让我知道它是否有效!