- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想使用 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+ 的 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);
希望这对您有所帮助。
关于c# - 如何为单个字符着色并保持适当的间距/字距调整/对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13163894/
我是一名优秀的程序员,十分优秀!