【发布时间】:2015-05-15 02:53:21
【问题描述】:
好的,所以我已经做了一段时间的工作,我已经到了计划文本渲染部分的地步。
我已经可以用两种方式绘制文本字符串了; DrawString 和 TextRenderer.DrawText。我更喜欢 DrawText,因为使用 TextRenderer.Measure text 时测量文本更准确。
我有一堂课:
public class Character
{
public string character {get; set; }
public Font font {get; set; }
public Point position {get; set; }
}
以及所有按下的字符的列表:
public List<Character> chars = new List<Character>();
现在我的问题是我需要能够在运行时为任何给定的选定字符或单词设置不同的字体和颜色以及粗体或斜体。所以我不能只画一个完整的字符串,因为这样我就无法为用户选择更改的每个字符设置单独的字体设置。
所以我需要能够为每个字符存储不同的字体样式信息,然后将它们全部添加到一个列表中,这样我就可以遍历每个字符并按照应该绘制的方式绘制每个字符(即每个字符都有自己的风格等)。
这个解决方案对我来说很好。而且由于几个月来我无法在任何地方找到有关此的任何信息,我完全被困住了。
我的主要问题是,因为我是逐个字符地绘制,所以我不知道每个字符应该与之前绘制的字符相距多远(紧缩)。
对于输入(文本框)控件,我们如何自定义绘制文本并允许用户将单词的一部分设为蓝色,而将单词的另一半设为不同的大小、颜色和样式,例如,同时仍然遵守正确的字距设置?
我们如何知道在哪里绘制每个字符?
人们说只需立即重新启动整个字符串。但这并不能解决我最初的问题。我需要能够逐个绘制每个字符,以便保存有关它的字体信息。
【问题讨论】:
-
对于更简单的解决方案(没有字距调整),请确保在测量单个字符时使用必要的GenericTypographic option!
-
我已经解决了创建字距调整表的问题。它将由一个标识符组成,该标识符包含 两个 字符及其两个 Fonts 作为键和一个 int 作为值。请注意,字距调整表始终包含字符 pairs;仅一个角色无法知道与下一个角色的最佳距离!
-
非常感谢您的 cmets @TaW。昨晚本来想回复的,结果睡着了。您的一个链接中的代码非常有用。
标签: c# .net winforms gdi kerning