我需要將字體渲染到3D遊戲世界,所以我使用GetGlyphOutline輪廓函數來將字形形狀渲染爲紋理。但是,我希望能夠處理字符不在給定字體中的情況(亞洲其他國際文本通常是這種情況)。 Windows文本渲染將自動替換具有所需字符的字體。但GetGlyphOutline不會。我如何檢測這種情況,並獲得替代字形的輪廓? Mac OS X Core Text有一個函數可以爲給定的字體和字符串獲取匹配的替換字體 - 在Windows上有沒有類似的東西?Windows:從其他字體中替換字符的輪廓輪廓
回答
找到我需要了解的我自己:IMLangFontLink interface,特別是MapFont方法包含所需的功能,以找出哪些替代字體應該在Windows上使用。
我也對感到困惑。我不確定您是否能夠做到這一點,但我可以使用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
}
}
雖然這可能會起作用,但是不使用LineTo來渲染字體只能爲您提供字體輪廓?你也不會得到反鋸齒,並且它會正確處理TTF字體中的貝塞爾曲線嗎? – 2011-01-20 10:31:22
@jonas:這一切都取決於您正在繪製的設備上下文(以及它如何配置)。此外,如果您在'BeginPath'和'EndPath'內使用'LineTo',那麼在使用'StrokePath'或'EndPath'之前不會繪製任何內容。這也只是表明你可以獲得路徑,一旦你有了路徑,你可以將它擠壓成3D物體或者在屏幕上繪製它。 – dreamlax 2011-01-20 10:45:32
- 1. 從輪廓中提取最外輪廓
- 2. 輪廓輪廓着色器
- 3. 字體中的紅色輪廓
- 4. UIButton中的輪廓文本/字體
- 5. OpenCV:從輪廓樹轉換爲輪廓 - cvContourFromContourTree()
- 6. 輪廓匹配 - 找到輪廓位移
- 7. 繪製輪廓後找到輪廓
- 8. Python clabel文字外輪廓
- 9. 陣營本地字體輪廓/ textShadow
- 10. 輪廓發現
- 11. 輪廓形狀
- 12. Opencv輪廓
- 13. 提取輪廓
- 14. OpenCV輪廓?
- 15. 輪廓提取
- 16. 輪廓匹配
- 17. matplotlib中的輪廓不會繪製輪廓的指定數量
- 18. 輪廓的偏度
- 19. 摹輪廓Matlab的
- 20. 縮放的輪廓
- 21. 輪廓線中輪廓線的平滑度
- 22. matplotlib中的輪廓標籤填充輪廓錯誤?
- 23. 在Direct3D中填充文字輪廓
- 24. 「大綱」的輪廓全部是*,其內部充滿了字符「。」。
- 25. GIF白色輪廓
- 26. 輪廓文本xamarin
- 27. css輪廓左右
- 28. XNA河段輪廓
- 29. 福利奧輪廓
- 30. 覆蓋CAShapeLayer輪廓
是的IMLangFontLink接口庫總是安裝在Windows上? – epotter 2009-12-02 16:19:48
據我所知,它通過Internet Explorer 4.0或更高版本進行安裝。我不知道是否可以安全地推測它是在任何Windows系統上,即使IE已被刪除。 – 2009-12-02 16:37:29