簡體   English   中英

確定渲染字符在 .NET 中的寬度

[英]Determine how wide a rendered character is in .NET

假設我在 Arial Regular 中使用 14 號字體將字符“A”渲染到屏幕上。 C# 中有沒有辦法計算它有多少像素寬?


我呈現文本的方式是通過 ESRI 的 ArcEngine,它通過 DynamicDisplay 引擎以時尚的方式調用 GDI 或 GDI+(我不知道是哪個)。

這取決於所使用的渲染引擎。 .NET 可以使用 GDI 或 GDI+。 可以通過相應地設置UseCompatibleTextRendering屬性或調用Application.SetCompatibleTextRenderingDefault方法來完成切換。

使用 GDI+ 時,您應該使用MeasureString

string s = "A sample string";

SizeF size = e.Graphics.MeasureString(s, new Font("Arial", 24));

使用 GDI(即本機 Win32 渲染)時,您應該使用TextRenderer類:

SizeF size = TextRenderer.MeasureText(s, new Font("Arial", 24));

本文中描述了更多詳細信息:

文本呈現:使用 Windows 窗體控件中的復雜腳本構建世界就緒的應用程序

請注意,上面討論的是 Windows 窗體。 在 WPF 中,您將使用FormattedText

這是一篇關於確定字體指標的 MSDN 文章。 您可以使用Graphics.MeasureString進行測量。

你沒有說你是如何“渲染”它的,但如果你有一個字符串,你也可以使用MeasureString

Graphics.MeasureString將為您提供當前圖形單位的大小。

不是真的,你只能做一個估計。 TrueType 提示、字距調整和字形懸垂使得測量單個字符幾乎不可能。 一些代碼:

    public float GetAWidth() {
        using (var font = new Font("Arial", 14)) {
            SizeF size = TextRenderer.MeasureText(new string('A', 100), font);
            return size.Width / 100;
        }
    }

在我的機器上返回 13.1。 避免這樣做。

對於 Windows 窗體,您使用Graphics.MeasureString ,對於 WPF,您使用FormattedText.WidthFormattedText.Height

MeasureString 屬性指示應該使用多寬的字段來顯示字符串,允許一些“傾斜”用於懸垂。 特別地,“a”的報告寬度加上“b”的報告寬度往往比“ab”的報告寬度大得多。 作為一個粗略的近似值,我建議如果你想要“a”的寬度,你減去“||”的寬度從“|a|”的寬度開始。 請注意,這仍然只是近似值,這既是因為舍入問題,也是因為字符寬度因上下文而異。 例如,在許多字體中,字符串“TATATATAT”可能看起來比“AAAATTTTT”窄,因為 A 可以位於 T 的下方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM