关于gdi+精确计算graphics.DrawString所需要的宽度问题

本文探讨了在使用gdi+绘制文字时,根据文字内容计算所需区域大小的常见问题,以及如何通过调整StringFormat参数或计算额外空白大小来解决文字绘制不全的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在使用gdi+时,可能会有需求,要根据需要绘制的文字来计算所需要的区域的大小。如在文字后面紧贴着一个图片,或者是类似于QQ/微信中的聊天气泡。这时,你可能会发现按照微软MSDN的示例(参考链接[1]),计算出来的大小用来绘制时,会出现有一个或者两个字符无法正确绘制出来的问题。

       经过查找资料,在文献[3]中提到:默认情况下,DrawString时左右是留有空白的,而MeasureCharacterRanges的时候是不包括这部分空白。

       所以就存在两个解决方案,一个方案就是在绘制和计算时,按照文献[3]中的说法,使用StringFormat::GenericTypographic()使得左右没有空白;另外一个方案就是在计算时添加上这块空白的大小,具体可以参考文献[4]和文献[5]。


参考文献:

[1] https://msdn.microsoft.com/zh-cn/library/ms535796(v=vs.85).aspx

[2] https://msdn.microsoft.com/en-us/library/windows/desktop/ms534568(v=vs.85).aspx

[3] http://bbs.youkuaiyun.com/topics/390713627

[4] http://stackoverflow.com/questions/11708621/how-to-measure-width-of-a-string-precisely

[5] http://stackoverflow.com/questions/4428335/how-to-get-the-exact-text-margins-used-by-textrenderer


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值