0

祝大家有美好的一天。

目前我正在尝试实现支持 NSAttributedString 的 CCLabelTTF 子类以获取多色标签。而且我因缺乏 CoreText 和 CoreGraphics 知识而受到阻碍。

在阅读了一些指南后,我创建了 CCTexture2D 类别以使用 NSAttributedString 对象创建纹理。

这是我的绘图代码:

data = calloc(POTHigh, POTWide * 2);

colorSpace = CGColorSpaceCreateDeviceGray();
context = CGBitmapContextCreate(data, POTWide, POTHigh, 8, POTWide, colorSpace, kCGImageAlphaNone);
CGColorSpaceRelease(colorSpace);

if( ! context ) 
{
    free(data);
    [self release];
    return nil;
}

UIGraphicsPushContext(context);

CGContextTranslateCTM(context, 0.0f, POTHigh);
CGContextScaleCTM(context, 1.0f, -1.0f); 

// draw attributed string to context
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);

CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, CGRectMake(0.f, 0.f, dimensions.width, dimensions.height));

CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, NULL);

CTFrameDraw(frame, context);

UIGraphicsPopContext();

CFRelease(frame);
CGPathRelease(path);
CFRelease(frameSetter);

现在我遇到了一些麻烦:


第一个 - 我的纹理显示为垂直翻转。我想,这些线条

CGContextTranslateCTM(context, 0.0f, POTHigh);
CGContextScaleCTM(context, 1.0f, -1.0f); 

应该防止这种情况。


第二个,如果我创建 RGB 上下文,我在屏幕上看不到任何东西。我试图用这些线创建 RGB 上下文。

colorSpace = CGColorSpaceCreateDeviceRGB();
context = CGBitmapContextCreate(data, POTWide, POTHigh, 8, POTWide * 4, colorSpace, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Big);

我试图用谷歌搜索,但没有找到与我的问题相关的任何内容=(感谢任何帮助(链接或建议)。

4

3 回答 3

1

几件事要尝试:

  • 您的数据分配对于 RGB 来说不够大。尝试:data = calloc(POTHigh, POTWide * 4);对于 RGB 颜色空间。
  • CTFrameDraw绘制与 GL 坐标有关,因此您无需使用CGContextScaleCTM(context, 1.0f, -1.0f);
    • 该行被放入为 CCLabelTTF 创建的原始 CCTexture2D 中,因为它使用drawInRect:了与 UIKit 坐标相关的 NSString。
  • 也许尝试其他 alpha 掩码标志...?查看 Apple关于 iOS支持的像素格式的文档,了解您的选择。
于 2012-06-07T20:40:49.203 回答
0

使用它来获得颜色纹理:

context = CGBitmapContextCreate(data, POTWide, POTHigh, 8, POTWide, colorSpace, kCGImageAlphaPremultipliedLast);
于 2013-02-03T17:26:54.560 回答
0

您可能想看看 ActiveTextView-iOS ( https://github.com/storify/ActiveTextView-iOS )。它可能有用。

于 2012-06-08T07:26:05.690 回答