【问题标题】:C# String MeasurementsC# 字符串测量
【发布时间】:2012-04-29 10:57:15
【问题描述】:

我想将字符串的长度测量为像素单位。我在网上搜索了 2 天,但没有运气。最后,我在几分钟前从博客中找到了一些代码sn-p,并稍微修改了一下。这是我的功能:

private void cmdMeasure_Click(object sender, EventArgs e)
{
    Font fntStyle = new Font("Arial", 16, FontStyle.Regular, GraphicsUnit.Pixel);
    Size textSize = TextRenderer.MeasureText(str2measure.Text, fntStyle);
    MessageBox.Show(textSize.ToString());
}

问题:

16的单位是什么?是em、pt还是GraphicsUnit枚举的单位?我并没有真正得到 c# 定义的描述“unit 参数指定的单位中新字体的 em-size”。

TextRenderer.MeasureText 方法是否在其度量中包含字符之间的空格?

【问题讨论】:

  • 按照文档herehere 显示,16 以像素为单位,因为参数GraphicsUnit.Pixel 提供给Font 构造函数。
  • 多亏了 GraphicsUnit.Pixel,它将以像素为单位,并且对于大多数字体意味着 - 大写字母 W 的高度。字符可以自然重叠,并且测量将从左侧返回最终大小 -从一侧到右侧加上边缘填充。您还可以使用 Graphics.MeasureCharacterRanges。

标签: c# winforms string units-of-measurement


【解决方案1】:

回答 Q1。仅当您传递 GraphicsUnit.Pixel 时它是像素

回答 Q2。它正在考虑整个文本块,无论内容是什么,甚至是空格。

【讨论】:

    【解决方案2】:

    16的单位是什么?是em,pt,还是GraphicsUnit的单位 枚举?我真的没有得到 c# "the em-size of 以 unit 参数指定的单位表示的新字体。"

    正如其他人所说,它是像素,因为您传递了 GraphicsUnit.Pixel。

    TextRenderer.MeasureText 方法是否包括之间的空格 测量中的字符?

    是的。它为您提供了围绕整个文本块的边界框的尺寸。

    【讨论】:

    • 我尝试测量字符串“a”,它返回的宽度为 17,高度为 18。所以您是说宽度或高度减去 16 等于边界框的厚度?
    • 17x18 尺寸仅仅意味着在 Arial 屏幕上以 16 号字体绘制的“a”可以很好地放入 17x18 矩形内。将其视为“用于”显示文本的区域。
    • 是的。在此处查看文档:msdn.microsoft.com/en-us/library/…
    【解决方案3】:

    TextRenderer.MeasureString 确实考虑了空格。在您的示例中,数字 16 以像素为单位。

    虽然,我不确定您是否正确测量了您的字符串。我认为您需要从 str2measure 文本框中获取您的字体:

    Size textSize = TextRenderer.MeasureText(str2measure.Text, str2measure.Font);
    

    【讨论】:

    • 我尝试更改 str2measure.Text 的字体属性,但函数返回的结果相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多