GDI 與 GDIPlus 獲取文字寬度的方法

2021-06-22 20:28:35 字數 1468 閱讀 1656

/// gdi獲得字型寬度的方法

cclientdc dc(this); 

cfont font; 

//requested font height in tenths of a point.

//for instance, pass 120 to request a 12-point font.)

//由上面解釋可知,120這個引數是取其1/10為作為字型大小,

//不過實際中計算中文時

,發現比例為11:1,這個有待進一步研究

font.createpointfont(120, _text("arial"));

dc.selectobject(font); 

csize size= dc.gettextextent(_text("字型大小"));/// 這是以point(點)為單位的計算方法

int ndpix = dc.getdevicecaps(logpixelsx);/// x座標每英吋的點數 dot per inch

int ndpiy = dc.getdevicecaps(logpixelsy);/// y座標每英吋的點數 dot per inch

/// point(點) 轉化為 pixel(畫素)

int textwidth = dc.gettextextent(_text("字型大小")).cx * 72 / ndpix;

int textheight = dc.gettextextent((_text("字型大小")).cy * 72 / ndpiy; 

/// gdiplus獲得字型寬度的方法一

gdiplus::font grfont(_text("arial"), 12);

stringformat stringformat(stringalignmentnear);

lpctstr lpstr = _text("2010text測試文字");

// 接收字型的顯示區域,如寬高

rectf stringrect; 

rectf layoutrect(0, 0, 600, 100);

);//獲得字型高度與寬度

stringrect

graphics.measurestring(lpstr, (int)_tcslen(lpstr), &grfont, layoutrect, &stringformat, &stringrect);

實際應用時,我們發現,如果是非中文本串,如字母和數字,用measurestring測量出來的寬度基本正確,

可一旦這個字串中存在中文,用measurestring測量出來的結果就有偏差了。

現改用graphicspath的邊界來處理,測試結果比較精確。

/// gdiplus獲得字型寬度的方法二

sizef gettextbounds(const font& font,const stringformat& strformat,const cstring& sztext)

原文:

GDI 入門(三 GDI 中文字操作)

三 gdi 中文字操作 using system.drawing using system.drawing.drawing2d using system.drawing.text private void button1 click object sender,eventargs e private...

GDI 測算文字繪製範圍

啥也不羅嗦,上 gdiplus solidbrush brush gdiplus color 124,25,28 gdiplus rectf bound size sz hdc hdc gs.gethdc settextcharacterextra hdc,0 settextjustificatio...

7 利用GDI 繪製文字

s 要繪製的字串。它定義字串的文字格式。它確定所繪製文字的顏色和紋理。結構,它指定所繪製文字的左上角。drawstring string s,font font,brush brush,pointf point drawstring string s,font font,brush brush,fl...