我正在尝试估算像素中的宽度,如果在我正在创建的工具中使用C#作为特定字体(Arial 18px)在Chrome中呈现文本。
将我的结果与此工具进行比较(使用浏览器渲染宽度): http://searchwilderness.com/tools/pixel-length/字符串:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit."
计算宽度为439像素。
但是用C#中的代码我得到445px:
var font = new Font("Arial", 18, FontStyle.Regular, GraphicsUnit.Pixel);
var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
var size = TextRenderer.MeasureText(text, font, new Size(int.MaxValue, int.MaxValue), TextFormatFlags.NoPadding);
我可以修改我的代码,使其渲染类似于浏览器吗?
我尝试输出带有字体和文字的标签,并与浏览器渲染进行比较(+/- 1px)。
答案 0 :(得分:3)
您可以使用GDI +代替StringFormat.GenericTypographic
:
var font = new System.Drawing.Font("Arial", 18, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
var text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
var graphics = System.Drawing.Graphics.FromHwnd(IntPtr.Zero);
var size = graphics.MeasureString(text, font, int.MaxValue, System.Drawing.StringFormat.GenericTypographic);
答案 1 :(得分:0)
最简单的方法是构建一个客户端呈现的字符宽度数据库。它远非微不足道,测量每种独特字体,变体(粗体/斜体),大小,缩放因子,浏览器和平台的所有字符。
为避免这种情况,在客户端执行渲染逻辑可能更为明智,其中可以使用等效于getTextWidth()的方式找到实际值。