我需要呈现字体转换为3D游戏世界,所以我用了GetGlyphOutline轮廓函数来获取字形形状渲染到纹理。不过,我希望能够处理其中的字符不存在于给定字体的情况下(通常是亚洲以外的其他国际文的情况下)。 Windows文本渲染将自动替换,因为他们需要的字符的字体。但GetGlyphOutline不会。我如何可以检测到这种情况,并得到轮廓为取代字形? Mac OS X的核心文本具有一个函数来获取匹配的置换字体给定字体和字符串 - 有什么在windows相似?

有帮助吗?

解决方案

发现我需要知道自己是什么:该 IMLangFontLink介面,尤其是MapFont方法包含所需的功能,以找出哪些替代字体应的窗口上被使用。

其他提示

我也有困惑与GetGlyphOutline。我不知道,如果你能这样做,但我可以通过与TextOut()BeginPath()EndPath()组合使用GetPath()获得混合脚本文本轮廓。

例如,即使有Arial字体,我能够得到日语文本的路径「テスト」(使用C ++,但可以很容易地用C来完成为好):

SelectObject(hdc, hArialFont);
BeginPath(hdc);
TextOut(hdc, 100, 100, L"\u30c6\u30b9\u30c8"); // auto font subbing
EndPath(hdc);

// get number of points in path
int pc = GetPath(hdc, NULL, NULL, 0);

if (pc > 0)
{
    std::vector<POINT> points(pc);
    std::vector<BYTE> types(pc); // PT_MOVETO, PT_LINETO, PT_BEZIERTO

    GetPath(hdc, &points[0], &types[0], pc);

    // it seems the first four points are the bounding rect
    // subsequent points match up to their types

    for (int i = 4; i < pc; i++)
    {
        if (types[i] == PT_LINETO)
            LineTo(hdc, points[i].x, points[i].y); // etc
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top