【发布时间】:2012-10-21 06:17:47
【问题描述】:
我想使用 Graphics.DrawString 来使用单独的颜色绘制字符。
问题是每次调用 DrawString 时,我都必须知道相对于其他字符的位置(使用点或矩形)。
考虑到在具有 StringFormat 的矩形中使用 DrawString 时发生的字距调整和换行,这几乎是可能的。 StringFormat 对于指定对齐、环绕、修剪等很重要。
理想情况下,我可以告诉 DrawString 如何单独为每个字符着色。另一种选择是如果我可以使用 StringFormat 测量矩形中的字符串,然后检索每个字符索引的 X 和 Y 位置,以便我可以用自己的画笔绘制每个字符。
我尝试单独测量每个字符,但这不起作用,因为字符串中的字符组合与单独测量的每个字符的宽度不同。
编辑: 下面是当我取一个字符串,获取 Region 数组,用红色和蓝色交替填充这些区域,然后尝试在这些区域中绘制每个单独的字符时发生的情况:
我调用 DrawString 如下:
g.DrawString(character, font, brush, region.GetBounds(g));
还尝试了以下方法:
Rectangle bounds = Region.GetBounds(g);
g.DrawString(character, font, brush, new PointF(bounds.Left, bounds.Top));
还有,
g.DrawString(character, font, brush, region.GetBounds(g), stringFormat);
同样的结果。
【问题讨论】:
-
用gdi+,你可以测量字符串。因此,您可以通过测量切割到该字符的字符串来检查下一个字符必须出现的位置。然后,您可以一个一个地输出字符。或者您可以使用 Graphics.MeasureCharacterRanges 来获取每个字符的位置
-
我尝试过使用 MeasureCharacterRanges,但我似乎无法使用这些区域绘制每个字符。如果我在应该进入的区域中使用 DrawString 绘制每个字符,则该区域太小并且会剪切字符。
-
用我的结果编辑了我的问题。
标签: c# gdi+ drawstring