TextRenderer.MeasureText 和 Graphics.MeasureString 大小不匹配

2023-11-26

这不是舍入问题。差异 ~ 5+ 像素。

测试用例字符串:“”MACD (26,12,9) -0.000016”

e.Graphics.MeasureString("MACD (26,12,9) -0.000016", SystemFonts.DefaultFont).Width)
TextRenderer.MeasureText("MACD (26,12,9) -0.000016", SystemFonts.DefaultFont).Width)

结果总是:

139.3942
134

为什么尺寸相差这么大?我只需要外部绘制方法的字符串宽度的轮。但它应该与 MeasureString 匹配,反之亦然。


TextRenderer使用 GDI 呈现文本,而Graphics使用GDI+。两者使用稍微不同的方法来布局文本,因此大小不同。

您应该使用哪一种取决于最终用于实际绘制文本的内容。如果您使用 GDI+ 绘制它Graphics.DrawString,测量使用Graphics.MeasureString。如果您使用 GDI 绘图TextRenderer.DrawText,测量使用TextRenderer.MeasureText.

如果文本将显示在 Windows 窗体控件内,则它使用TextRenderer if UseCompatibleTextRendering被设定为false(这是默认值)。

阅读你问题的字里行间,你似乎正在使用TextRenderer因为你没有Graphics外部的实例Paint事件。如果是这种情况,您可以自己创建一个来进行测量:

using( Graphics g = someControl.CreateGraphics() )
{
    SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont);
}

如果您无权访问控件来创建图形实例,您可以使用它为屏幕创建一个图形实例,这对于测量目的来说效果很好。

using( Graphics g = Graphics.FromHwnd(IntPtr.Zero) )
{
     SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TextRenderer.MeasureText 和 Graphics.MeasureString 大小不匹配 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable

随机推荐

  • Java路径..jvm.cfg错误

    谁能告诉我为什么当我尝试运行 Java 程序时出现以下错误 程序编译成功 但无法运行 我已经设置了Java的路径 C JavaServ gt javac hello1 java C JavaServ gt java hello1 Error
  • mysql 存储过程与 INTO OUTFILE

    我有一个 mysql 存储过程 我想做两件事 1 查询一个表 并将结果作为正常结果集返回 2 迭代结果集并从过程本身创建一个格式化文本文件 我查看了 INTO OUTFILE 但似乎 INTO OUTFILE 将原始结果写入指定的文件 而且
  • 在更改类中的属性时,有没有办法让 didSet 工作?

    我有一个带有属性观察者的类作为属性 如果我更改该类中的某些内容 是否有办法触发 didSet 如示例所示 class Foo var items 1 2 3 4 5 var number Int 0 didSet items number
  • React Native 无限滚动

    我试图获得无限滚动的最小示例 所以我有这个 var React require react native var StyleSheet View Image ListView React var data id 1 profile pict
  • PostgreSql:禁止更新列:如何?

    使用 PostgreSql 可以在没有触发器的情况下不允许更新列 只允许插入 完全未经测试 但由于 Postgres SQL 支持列级权限 看起来可能是这样 http www postgresql org docs current stat
  • N 元组与对

    在 Ocaml 中 具有不同元数的元组具有不同的类型和值构造函数 let a 1 2 3 val a int int int 1 2 3 let b 1 2 3 val b int int int 1 2 3 请注意 第二个示例 b 比第一
  • 配置 ELMAH:无法识别的配置部分错误

    Setup 视窗XP NET框架3 5 SP1 ASP NET MVC 版本 1 我一直在尝试按照以下说明设置 ELMAHhttp code google com p elmah wiki MVC但按 F5 时出现以下错误 Descript
  • SVG 仅在 Safari 中悬停时调整大小

    我有一个奇怪的问题 svg 在 Safari 中悬停时调整大小 我使用 jquery 的悬停来用稍微不同的 svg 替换页面上的 svg 除了 Safari 之外 此功能在所有浏览器中都可以正常工作 由于某种原因 Safari 会在鼠标悬停
  • 更改密码后 KeyStore getEntry 返回 null

    您好 我有一个程序需要在密钥库中存储密钥 我生成一对密钥并签署一个值 这始终可以完美运行 当用户进入首选项并更改密码或将密码模式更改为 pin 模式时 就会出现问题 之后 当我尝试访问私钥时 密钥库返回给我一个空值 我知道密钥存储值是用解锁
  • Julia:添加包的问题 (BinDeps)

    我是 Julia 包管理器的新手 在安装 GLPK 和 LinProgGLPK 时遇到问题 我已经跑了Pkg Init 并已成功安装 Curl 使用Pkg add Curl 但是 当我尝试安装 GLPK 或 LinProgGLPK 使用Pk
  • PHP 的基本身份验证产生无限循环

    由于某种原因 我无法在我的服务器上使用 PHP 进行基本身份验证 我正在使用手册页中的确切代码
  • 如何扩展可用 Java 语言环境列表

    我正在寻找一种方法将更多区域设置添加到 Java 1 6 中可用的区域设置中 但我想要创建的区域设置没有 ISO 3166 国家 地区代码 也没有 ISO 639 语言代码 无论如何 有什么办法可以做到这一点吗 我想添加的区域设置仅在语言名
  • 递归块内的 ARC 行为

    我制作了这两个实用函数 void dispatch void f afterDelay float delay dispatch after dispatch time DISPATCH TIME NOW int64 t delay NSE
  • Appengine - 使用 https 的本地开发服务器

    目标 使用 App Engine 开发服务器缩短开发反馈周期 为了我的使用 它必须作为公共 HTTPS 地址可用 App Engine 开发服务器仅支持 HTTP 这个怎么做 使用 ngrok 将本地开发环境公开为 https 公开可用地址
  • PyLint 错误空白配置

    有没有办法配置检查bad whitespace检查 PyLint 我目前可以禁用检查 但我宁愿强制执行空白约定而不是禁用它 您可以使用两个选项 全局禁用错误空白警告 pylint disable C0326 使用 Pylint 配置文件 p
  • 为什么固定定位会改变元素的宽度?

    我有一个 div 其宽度设置为100 当我添加position fixed到它 宽度变成16px larger 我注意到身体上有8px各边都有边距 所以我猜position fixed以某种方式忽略了包含它的正文标签的边距 我看了看MDN
  • 如何创建具有可变数量参数的函数?

    如何在 Rust 中创建具有可变数量参数的函数 就像这段Java代码 void foo String args for String arg args System out println arg 一般来说 你不能 Rust 不支持可变参数
  • 为什么我们真的需要向下转型? [复制]

    这个问题在这里已经有答案了 我试图弄清楚为什么我需要向下转型 我重新阅读了拼贴画中的笔记 发现了下面的例子 class Student class Graduate exteds Student getResearchTopic this
  • 如何仅在 bean 存在时才注入它

    我有以下 Spring 上下文文件结构 gt 代表 包含 A1 xml gt B xml C xml A2 xml gt B xml C xml定义一个beanc B xml定义一个beanb依赖于c 显然这对于 A2 来说是失败的 因为没
  • TextRenderer.MeasureText 和 Graphics.MeasureString 大小不匹配

    这不是舍入问题 差异 5 像素 测试用例字符串 MACD 26 12 9 0 000016 e Graphics MeasureString MACD 26 12 9 0 000016 SystemFonts DefaultFont Wid