我注意到Graphics.MeasureString在不同分辨率下的奇怪行为。graphics.MeasureString在不同分辨率下的奇怪行为
对于默认分辨率(96x96),我测试的不同字体大小之间存在线性关系。
但是,如果我将它提升到512 x 512,则使用度量字符串时,线性关系将消失,并且会发生一些真正奇怪的事情。 (参见下面的4绘出)
如果我离开分辨率在用于图形对象的默认大小,并测量字体大小,这里是字体大小和字符串的宽度之间的关系:
图形对象,默认分辨率(96):
字体尺寸(X轴),一个特定的字符串的宽度(Y轴)
字体尺寸(X轴),一个特定的字符串的HEIGHT(Y -AXIS)
但是,如果我改变分辨率
图形对象,512分辨率:
字体尺寸(X轴),一个特定的字符串的宽度(Y轴)
字体大小(X轴),特定字符串的高度(Y轴)
任何人都知道为什么会发生这种情况?
谢谢你。
它应该指出的是,我使用的.NET 4(全部档案)
代码用于生成图表(针对每种类型更改分辨率):
string str = "6 CN-3 Tie EomgVeo405- 2ss>era09rni IBne 20iopv Atdrsn - Ng72";
SizeF sizef = new SizeF(855, 14.000001f);
StringFormat stringFormat = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Near,
Trimming = StringTrimming.None,
FormatFlags = StringFormatFlags.NoClip,
};
Bitmap b = new Bitmap(901, 401);
//b.SetResolution(512, 512);
Graphics g = Graphics.FromImage(b);
for (float x = origFont.Size; x >= 0.5; x -= 0.1f)
{
var data = g.MeasureString(str, new Font("Microsoft Sans Serif", x), sizef, stringFormat);
Console.WriteLine(x + "\t" + data.Width + "\t" + data.Height);
}
Graphics.MeasureString()很糟糕,用.NET版本2中的TextRenderer.MeasureText()取代。否则,您可以从TrueType提示算法中预期的模式种类。在点或像素大小小于8的情况下渲染文本是没有意义的。 – 2012-03-02 00:29:53
当宽度达到850时,它开始'口吃'。这是我给Graphics.MeasureString提供的最大允许宽度。正如Lasse V. Karlsen指出的那样,织物的包装物正在缠绕。我未能添加“无包裹”标志。感谢大家! – JHubbard80 2012-03-02 00:49:46