3

如果我在下面使用文本的宽度来计算大小,给我说 500

intWidth = (int)objGraphics.MeasureString(String.concat(sImageText1, sImageText2), objFont).Width;

但如果我喜欢这样

intWidth = (int)objGraphics.MeasureString(sImageText1, objFont).Width + (int)objGraphics.MeasureString(sImageText2, objFont).Width;

我搜索了很多,并做了很多不同的场景,但如果我们使用带有全文或部分的“MeasureString”测量字符串宽度,仍然会有所不同。

为什么是这样?

4

1 回答 1

6

该文档有答案:

MeasureString 方法设计用于单个字符串,并在字符串前后包含少量额外空间以允许悬垂字形。此外,DrawString 方法会调整字形点以优化显示质量,并且可能会显示比 MeasureString 报告的更窄的字符串。要获取适合布局中相邻字符串的度量(例如,在实现格式化文本时),请使用 MeasureCharacterRanges 方法或采用 StringFormat 的 MeasureString 方法之一,并传递 GenericTypographic. 此外,确保图形的 TextRenderingHint 是 AntiAlias。

强调的部分是这里的相关内容。

要修复您的代码,请添加必要的参数:

intWidth = (int)objGraphics.MeasureString(sImageText1, objFont, 1024, Stringformat.GenericTypographic).Width
           + (int)objGraphics.MeasureString(sImageText2, objFont, 1024, StringFormat.GenericTypographic).Width;
于 2012-11-01T08:23:16.730 回答