使用核心文本获取字形名称

时间:2013-12-02 12:09:23

标签: macos core-text

对于小型项目,我需要以字体显示所有字形名称。所以,我想这样做:

CTFontRef f = CTFontCreateWithName(CFSTR("Zapfino"), 40, NULL);

CFIndex count = CTFontGetGlyphCount(f);
printf("There are %ld glyphs\n", count);

for (CGGlyph i = 1; i < count + 1; i++)
{
    CTGlyphInfoRef gi = CTGlyphInfoCreateWithGlyph(i, f, CFSTR("(c)"));
    CFStringRef name = CTGlyphInfoGetGlyphName(gi);
    CGFontIndex idx = CTGlyphInfoGetCharacterIdentifier(gi);

    printf("Glyph: %4hu, idx: %4hu ", i, idx);
    CFShow(name);
    printf("\n");

}

创建字体并获取字形计数就可以了。但是,字形的名称始终为NULL。 CTGlyphInfoRef变量'gi'得到一个值。有什么想法吗?我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

你误解了CTGlyphInfo的含义。它不是查询有关字形信息的方法。它表示将字形替换为字符串。您可以将字形信息对象设置为属性字符串中kCTGlyphInfoAttributeName属性的值。如果文本与基本字符串匹配,那么该字形将替换该范围的属性文本。

您可以使用CGFontCopyGlyphNameForGlyph()从字体中获取字形的名称。您可以使用CGFontRef函数直接创建CGFontCreate...()。您也可以使用CTFontCTFontCopyGraphicsFont()创建一个。