2012-07-10 56 views
1

任何人都可以告訴我如何計算以像素爲單位的字符串寬度,以像素爲單位提供字體大小?我必須在Linux下做C嗎?以像素爲單位的字符串寬度

+3

很大程度上取決於你用什麼引擎渲染你的文字,因爲不同的發動機可能會暗示對付不同,字距信息等等。你一定不僅要提供字體大小,還要提供字體本身。 – MvG 2012-07-10 09:32:37

+0

好吧,如果我也提供字體,但是怎樣才能繼續下去呢?我在開始時就陷入了困境,因爲我不知道如何獲得英文字母的高寬比。我能在哪裏得到這個? – 2012-07-10 09:37:35

+2

你還會打印文字,還是隻是測量它?如果您打印它,告訴我們您想如何打印它。如果你只想測量,想象你想打印它,可能使用提供的答案中的庫,並查看它們提供的測量信息。 – MvG 2012-07-10 09:46:00

回答

1

在最基本的情況中,假設它是一個固定長度的字體:

int string_width = strlen(str) * CHAR_WIDTH_PX; 

其中str是C字符串和CHAR_WIDTH_PX是字體的字符寬度。

但當然在不同的框架和系統中,事情是以不同的方式完成的。爲了幫助你,我們需要更多關於你的環境的信息。

+0

我可以知道CHAR_WIDTH_PX爲固定寬度的字體,但我必須爲比例字體做。 – 2012-07-10 09:55:24

+0

@ShraddhaK你應該在你的問題中指定。 – Alex 2012-07-10 09:56:31

4

除非您有固定的字體(每個字符始終爲X像素寬),否則您無法自己完成此操作。在這種情況下,當然總寬度= PixelPerChar * strlen(String)。

在一般比例字體的情況下,如果字符可能彼此「靠近」,例如A和V(​​稱爲「字距」的操作),則需要詢問字體呈現庫,例如, libGD2。這些庫通常提供字符串的邊界框,給定字體文件,大小,方向和其他參數。對於GD2使用gdImageStringFT

例子:

int bbox[8]; // x,y of the rectangle bounding the text: 
// see manual 

gdImageStringFT(NULL, // "Tell me only" 
     bbox,0, 
     "/home/lserni/fonts/Verdana.ttf",18, 
     0.0,0,0,"Hello world"); 

if (checks on bbox OK) 
{ 
    gdImageStringFT(gdHandle, bbox, 0, ...); 
} 
相關問題