Mik*_*ebb 5 c# drawing text measurement
我正在做的是获取字符串的像素大小并将其转换为百分之一英寸(即像素/ DPI =英寸,英寸*100 =百分之一英寸).这是我的代码:
private static SizeF TextSize(string text, Font txtFnt)
{
SizeF txtSize = new SizeF();
// The size returned is 'Size(int width, int height)' where width and height
// are the dimensions of the string in pixels
Size s = System.Windows.Forms.TextRenderer.MeasureText(text, txtFnt);
// Value based on normal DPI settings of 96
txtSize.Width = (float)Math.Ceiling((float)s.Width / 96f * 100f);
txtSize.Height = (float)Math.Ceiling((float)s.Height / 96f * 100f);
return txtSize;
}
Run Code Online (Sandbox Code Playgroud)
现在,使用Arial字体,这对于小于12的字体都可以正常工作,但之后字符开始被切断,因为计算出的尺寸小于实际尺寸.我知道我的DPI设置设置为96.我的字体定义与字体大小的变化相同:
Font myFont = new Font("Arial", <font size>, FontStyle.Regular, GraphicsUnit.Point);
Run Code Online (Sandbox Code Playgroud)
我相信我必须使用,GraphicsUnit.Point因为我正在绘制字符串的自定义控件,但GraphicsUnit事情呢?
是MeasureText功能甚至正常工作,或有别的事?
编辑
我正在绘制自定义打印预览控件.打印预览控件中的单位为"英寸/ 100"(因此转换).我相信文本,图像等是用Printer图形对象绘制的,但我不完全确定.
很久以前,我遇到了类似的问题,特别是测量文本框中的文本。问题的关键在于:绘制文本有两种主要方法。Win32 API 和 System.Drawing。如果您尝试测量文本框中的文本,它将使用 Win32 API 进行绘制,并且您还需要使用 Win32 API 来测量它。如果您测量由 System.Drawing 绘制的文本,则使用 .net 的测量结果将匹配。
基本上,表单文本框使用 Win32 API 进行布局和绘制,并且测量也需要来自 Win32。
您没有具体说明您在测量什么以及在哪里测量,因此这个答案可能不适用。