Я тоже озадачился GetGlyphOutline
. Я не уверен, что вы смогли сделать то же самое, но мне удалось получить наброски со смешанным текстом, используя TextOut()
в сочетании с BeginPath()
, EndPath()
и GetPath()
.
Например, даже с помощью шрифта Arial я могу получить путь к тексту на японском языке using テ ス ト 」(используя 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
}
}