CoreText带有灰色空间

时间:2013-05-24 13:04:19

标签: ios ios6 opengl-es core-graphics core-text

我正在尝试在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中是否有特殊设置才能使其正常工作?

由于

1 个答案:

答案 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];

我希望这有帮助,让我知道它是否有效!