我想使用Graphics.DrawString来使用单独的颜色绘制字符。
问题在于,每次调用DrawString时,我都必须知道相对于其他字符的位置(使用Point或Rectangle)。
考虑到在带有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);
相同的结果。
答案 0 :(得分:2)
GDI +的DrawString填充结果,解释了你得到的左偏移量。
尝试使用GDI来测量字符串。幸运的是,这是通过TextRenderer()
对象实现的,很容易从.Net到达,f.ex:
Size sz = TextRenderer.MeasureText(character,
font,
new Point(Integer.MaxValue, Integer.MaxValue),
TextFormatFlags.NoPadding);
您还可以查看TextRenderer.DrawText()
。
当然,您始终可以修改StringFormat
实例以使用中心对齐,并DrawString
修改矩形而不是点。
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
Rectangle cr = new Rectangle(x, y, w, h); //same as the colored region
g.DrawString(character, font, brush, cr, sf);
希望这有帮助。