2009-08-10 63 views
2

問我剛纔的問題about Uniscribe glyph kerning,但尚未收到答覆,加上進一步閱讀谷歌等後,似乎到Uniscribe可能不支持從字體字形提取字距信息。提取字形字距信息C++

我所以具有簡單的後續問題 - 在那裏提取字形字距信息用於從字體的指定字符串的任何很好的例子(優選與一些C++代碼)?

在各個地方都有人提到,Pango,QT或ICU都可以做到這一點,但是文檔在地面上有點薄,我很難知道從哪裏開始。

任何幫助指引我在正確的方向感激地收到。我已經有了用於以所需方式呈現字形的代碼,我只是在擴展字距信息之後,因此我可以將字形定位得更好一點。

感謝,

+1

以及Qt擁有API來實現對字體的字距,並獲得給定的字符串的寬度所說的字形,但我不認爲這是可以得到實際的字形信息公開的API。 http://doc.trolltech.com/4.5/qfont.html http://doc.trolltech.com/4.5/qfontmetrics.html http://doc.trolltech.com/4.5/qfontmetricsf.html – Bob 2009-08-12 12:32:41

+0

謝謝 - 至少排除了qt。 這看起來很簡單的事情是多麼困難是驚人的。 – 2009-08-12 14:52:51

回答

2

OpenType字體有兩種不同的方式來指定字距信息,這兩者都是可選:

  1. 克恩表,從TrueType字體繼承。該表提供了字符對信息(即,你應該多少水平地偏移一對特定的字符)。 Microsoft提供了specs for this table,並且還提供了一些Windows API函數,例如GetKerningPair()GetFontData(),可幫助您提取值。

  2. 的GPOS表,表的OpenType這顯然處理字形定位的每個可想到的形式。微軟在這張桌上也有一些specs,但說實話,我甚至不知道你會從哪裏開始......你可能想看看ICU是如何處理這種事情的。

我沒有找到代碼樣本的任何這種的方式很多,但我想像從緊排表越來越字距值遠遠高於GPOS表簡單。

+0

謝謝你。我已經開始使用GetKerningPair()和GetGlyphIndices(),現在我得到了可以接受的結果。這對於OpenType字體是不正確的,但現在這是一個可以接受的限制。 – 2009-08-19 15:42:22

+1

你可能也想看看Michael Kaplan的博客,他幾乎是微軟的「無文字」人物。 http://blogs.msdn.com/michkap/ – 2010-01-28 16:58:29