2

フォントを3Dゲームの世界にレンダリングする必要があるため、GetGlyphOutlineアウトライン関数を使用して、グリフの形状をテクスチャにレンダリングします。ただし、特定のフォントに文字が含まれていない場合(アジアの他の国際的なテキストの場合によくあることです)を処理できるようにしたいと思います。Windowsテキストレンダリングは、必要な文字を含むフォントを自動的に置き換えます。しかし、GetGlyphOutlineはそうではありません。このケースを検出し、置換されたグリフのアウトラインを取得するにはどうすればよいですか?Mac OS X Core Textには、特定のフォントと文字列に一致する置換フォントを取得する機能があります-Windowsに似たようなものはありますか?

4

2 に答える 2

2

私が自分自身を知る必要があることを見つけました:IMLangFontLinkインターフェース、特にMapFontメソッドには、Windowsで使用する必要のある置換フォントを見つけるために必要な機能が含まれています。

于 2009-12-01T17:06:50.883 に答える
1

私も困惑しまし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
    }
}
于 2011-01-06T03:46:14.483 に答える