ASP.NET MVC System.Windows.Forms.TextRenderer.MeasureText在不同的机器上提供不同的结果

时间:2014-10-31 14:52:57

标签: asp.net-mvc

我正在使用方法TextRenderer.MeasureText(用户名,新字体(“Verdana”,12))。用于验证用户名大小的宽度,它显示我本地计算机和服务器上相同用户名的不同值。同样在单元测试中,它计算的宽度不同于本地机器上的Web应用程序(与服务器上计算的宽度相同)。我认为这是因为我的本地机器IIS上的设置不同,但这令我感到困惑。我认为在我的本地机器上显示的值是错误的,因为它太高(180像素)而不是允许140像素。

更新: 当我使用设备上下文时,它在同一台机器上给出了相同的结果,不同机器上的不同宽度以及单元测试和Web应用程序:

            Bitmap B = new Bitmap(16, 16);  // Whatever, we only need a Graphics
            Graphics G = Graphics.FromImage(B);
            int verdanaWidth = TextRenderer.MeasureText(G, username, new Font("Verdana", 12)).Width;

单元测试和Web应用程序的宽度不同,因为Graphics对象具有不同的分辨率:

            float dpiX = G.DpiX; // 96 in unit test, 120 in web app on local machine, 96 on server
            float dpiY = G.DpiY; // 96 in unit test, 120 in web app on local machine, 96 on server

1 个答案:

答案 0 :(得分:0)

您需要使用接受设备上下文的 MeasureText 方法的覆盖(因为像素宽度取决于设备)。

有关其他信息,请参阅This SO question