我试图获得字符串的高度。我遇到过MeasureString,但它对我所需要的东西不准确 - 对于MS Word显示的东西来说太小了(好吧,这可能是另一个话题,所以如果你能指出我正确的资源...... 。)
所以,我发现了TextMetrics。我想尝试一下,但我无法理解如何使用它。这是我的示例代码:
static public double MeasureGroup2()
{
TextMetrics txt = new TextMetrics();
double height;
height = txt.Height;
return height;
}
在哪里/如何设置字体和字体大小,以及为其返回我需要的值的字符串?
P.S。我的最终目标是测量字符串的高度,就像MS Word"测量"或渲染它。我对除了这两个以外的其他解决方案持开放态度。
其他信息:
MeasureString的代码:
static public double MeasureGroup1(string TextFont, int FSize)
{
string Str = "Mgkfps";
Bitmap Bmp = new Bitmap(99,99);
Graphics DrawGraphics = Graphics.FromImage(Bmp);
GraphicsUnit Unit = GraphicsUnit.Point;
DrawGraphics.PageUnit = Unit;
DrawGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
StringFormat format = StringFormat.GenericTypographic;
// Set up string.
System.Drawing.Font stringFont = new System.Drawing.Font(TextFont, FSize, FontStyle.Regular, Unit);
// Measure string.
SizeF stringSize = new SizeF();
stringSize = DrawGraphics.MeasureString(Str, stringFont, 99, format);
DrawGraphics.Dispose();
format.Dispose();
stringFont.Dispose();
return stringSize.Height;
//return TextSize;
}
注意: 使用Arial 11和Arial 12,此代码的输出需要乘以1.0294,与MS Word的显示方式相同。使用Word的标尺,Photoshop和大量的比例和比例进行物理测量。 (也许这就是问题?)
static public double MeasureGroup2(string TextFont, int FSize)
{
string Str = "Mgkfps";
double height;
Bitmap Bmp = new Bitmap(99, 99);
Graphics DrawGraphics = Graphics.FromImage(Bmp);
GraphicsUnit Unit = GraphicsUnit.Point;
DrawGraphics.PageUnit = Unit;
DrawGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
StringFormat format = StringFormat.GenericTypographic;
// Set up string.
System.Drawing.Font stringFont = new System.Drawing.Font(TextFont, FSize, FontStyle.Regular, Unit);
Rectangle Rect = new Rectangle(0, 0, 99, 99);
Size sz = new Size(99,99);
sz = TextRenderer.MeasureText(DrawGraphics, Str, stringFont, sz ,TextFormatFlags.NoPadding);
height = sz.Height;
return height;
}
答案 0 :(得分:0)
首先,谢谢大家帮助我!
使用TextMetrics获取文本的尺寸时,请在此处参阅此文章: https://www.cyotek.com/blog/retrieving-font-and-text-metrics-using-csharp
他在页面底部有一个示例项目。
至于我希望使用它的位置,这是获得MS Word中文本的高度:
我假设文本高度和行间距设置为单一时是相同的。不是这种情况。有一小部分空间,即领先,不是由MeasureString测量的。这就是为什么我希望使用GetTextMetrics函数,因为它返回一个包含前导的结构。无论如何,它似乎用于其他东西。
幸运的是,显然,.NET框架有一个原生方法可以返回我需要的值,即FontFamily.GetLineSpacing。
LineHeight = stringFont.Size * FF.GetLineSpacing(FontStyle.Regular)/FF.GetEmHeight(FontStyle.Regular);
参考:
https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-obtain-font-metrics