在我的程序中,我需要生成一個位圖,其中包含從左到右放置的所有數字字符(0..9)以及其他幾個字符。如何在Windows窗體中使用精確的字符高度創建字體?
用戶將來自UI選擇:
- 所需的字體,並且以像素爲單位
- 所需的字符的高度。
所以我想創建一個位圖,然後從這個位圖中的圖形,然後將數字逐個繪製到這個位圖,然後將其保存到磁盤。
我在幾小時內無法弄清的: 如何創建一個正確大小的字體,以便數字「0」具有用戶給出的高度?我試着創建與本機CreateFont()通過P/Invoke(與正面/負面nHeight)的字體與String構造函數的所有參數,具有StringFormat屬性,與MeasureString/MeasureText/MeasureCharacterRanges。所有稱爲「大小」或「高度」的參數似乎都指示比「0」大得多的假想字符的大小。
我看過本着高度,EM高度,上升,下降等理論似乎有成爲該真正高度的字符沒有概念,沒有邊距和間距等
我再次問題:給定'0'字形的字體名稱和所需的像素高度,如何創建一個字體來繪製具有所需高度的字形?
我將不勝感激任何指導。
後編輯 關於我的項目的一些更多細節:這是一個帶有大顯示屏的嵌入式設備,我需要爲設計人員提供一種簡單方法來生成並嘗試他們喜歡的位圖字體。生成這種位圖字體的Windows工具對我來說似乎是一個很好的解決方案。
基於GDI +的文本測量有點奇怪。研究普通的GDI API。關於垂直居中文本的其他一些問題可能會有所幫助。 – CodesInChaos
系統字體系統將始終爲異常高或低字符保留空間。爲什麼不嘗試一個「測試和解決」循環?打印字符零,並以編程方式以像素爲單位測量其高度 - 例如檢查以確保水平至少有十行像素至少有一個位集。如果失敗,請將字體大小加1,然後重試直到成功。因爲會有一些重疊,所以不幸的是必須剪掉未使用的像素行。 –
是的,我想到了這樣的事情,但我想保留這個作爲最後的解決方案。我正在尋找愚蠢的Paint程序,該程序以某種方式設法完成我所需要的操作(我告訴它「Arial 10」,它將文本繪製爲10像素高),我希望有一個清晰的程序化方法來實現這一點... – adigostin