C#如何測量字串的高度寬度和精確取得字串的高度寬度

來源:互聯網
上載者:User

因為MFC中CDC有GetTextExtent()可以獲得字串的高度寬度 像素單位,所以自然想到c#的GDI+的MeasureString,這個同樣是測量字串高度寬度,但是這個不同於CDC,他不適用CDC.GetTextExtent()的適用領域,GDI+ MeasureString會自己處理矩形地區,返回這個矩形地區SizeF,這就是為什麼是浮點而不是整數,它根本就不是字串準確的高度寬度。 舉個例子:給定字串s,用Graphics的MeasureString擷取高度寬度sizeF,並在一個給定的起點顯示以sizeF為高度寬度的矩形大小和字串s

string s ="an English string and 一個中文字串";
Graphics g =this.CreateGraphics();
g.PageUnit = GraphicsUnit.Pixel;
g.SmoothingMode = SmoothingMode.HighQuality;
StringFormat sf =new StringFormat();
sf.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;
SizeF sizeF = g.MeasureString(s, this.Font, 500, sf);
g.DrawRectangle(Pens.Red, new Rectangle(100, 400, Convert.ToInt32(sizeF.Width), Convert.ToInt32(sizeF.Height)));
g.DrawString(s, this.Font, new SolidBrush(Color.Green), 100, 400);

以100,400座標位奇點繪製sizeF大小的矩形 和 字串 改sizeF是測量該字串得到的。

效果如下:(沒處理顯示品質 這個不是重點)注意'g'和'串'

說明Gdi+的MeasureString跟CDC的GetTextExtent完全不一樣 GDI+在字串四周添加一些長度,以適應字串絕對可以被測量得到的SizeF包裹住,而且在末尾添加的更多空白,大概是想包裹住文字單擊時的滑鼠狀態。

類似上面的代碼,使用TextRender的MeasureText精確獲得包裹字串的地區,效果如下:

區別在於字串末尾增寬 和 對英文字元下部的增寬處理。

因為MFC中CDC有GetTextExtent()可以獲得字串的高度寬度 像素單位,所以自然想到c#的GDI+的MeasureString,這個同樣是測量字串高度寬度,但是這個不同於CDC,他不適用CDC.GetTextExtent()的適用領域,GDI+ MeasureString會自己處理矩形地區,返回這個矩形地區SizeF,這就是為什麼是浮點而不是整數,它根本就不是字串準確的高度寬度。 舉個例子:給定字串s,用Graphics的MeasureString擷取高度寬度sizeF,並在一個給定的起點顯示以sizeF為高度寬度的矩形大小和字串s

string s ="an English string and 一個中文字串";
Graphics g =this.CreateGraphics();
g.PageUnit = GraphicsUnit.Pixel;
g.SmoothingMode = SmoothingMode.HighQuality;
StringFormat sf =new StringFormat();
sf.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;
SizeF sizeF = g.MeasureString(s, this.Font, 500, sf);
g.DrawRectangle(Pens.Red, new Rectangle(100, 400, Convert.ToInt32(sizeF.Width), Convert.ToInt32(sizeF.Height)));
g.DrawString(s, this.Font, new SolidBrush(Color.Green), 100, 400);

以100,400座標位奇點繪製sizeF大小的矩形 和 字串 改sizeF是測量該字串得到的。

效果如下:(沒處理顯示品質 這個不是重點)注意'g'和'串'

說明Gdi+的MeasureString跟CDC的GetTextExtent完全不一樣 GDI+在字串四周添加一些長度,以適應字串絕對可以被測量得到的SizeF包裹住,而且在末尾添加的更多空白,大概是想包裹住文字單擊時的滑鼠狀態。

類似上面的代碼,使用TextRender的MeasureText精確獲得包裹字串的地區,效果如下:

區別在於字串末尾增寬 和 對英文字元下部的增寬處理。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.