c#-使用DrawString()正确绘制文本
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-使用DrawString()正确绘制文本,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1523字,纯文字阅读大概需要3分钟。
内容图文
![c#-使用DrawString()正确绘制文本](/upload/InfoBanner/zyjiaocheng/674/b0bb36a0778e49658f08c79aa5c28d31.jpg)
我在Graphics.DrawString()方法上遇到问题.我的UserControl使用等宽字体在面板上绘制,很显然,DrawString()格式化文本的方式是不再完全等距.我一直在使用StringFormat来解决此问题,但没有成功:
StringFormat sf = new StringFormat(StringFormatFlags.NoClip | StringFormatFlags.FitBlackBox | StringFormatFlags.LineLimit | StringFormatFlags.MeasureTrailingSpaces);
绘制文本的代码:
for (int i = 0; i < document.Text.Count; i++)
g.DrawString(document.Text[i], Font, Brushes.Black, new PointF(offset - 2, offset + Font.Height * i), sf);
例如,在Consolas 9中绘制“ eeeeeeee”时,不时有两个e与另一个像素相距1个像素.有没有办法等距正确显示文本?
(我的实际问题:我是从头开始制作自己的文本框控件,作为练习和娱乐.实际上效果很好,但是显示文本的面板应该能够根据鼠标单击的位置定位插入符号.由于Font的Height属性,正确的行很容易,但是要在该行中找到当前索引却不是.对于非等宽字体,我无法想象确定插入符号的方法,但对于等宽字体,应该可行,因为符号的宽度是固定的.那么,也许有更好的方法来确定这一点?)
亲切的问候,
雅科
解决方法:
它是等距绘制的.只是每个字符的宽度不是整数的像素-每个字符的宽度可能约为9.9像素. (为使字符清晰易读,它会在绘制每个像素时将每个像素捕捉到最近的像素,这就是为什么有时您会看到两个像素靠近的原因.)
一种选择是使用AntiAlias标志,该标志将停止尝试将每个字符捕捉到最近的像素-它只会对边缘进行灰度模糊处理,因此整个间距看起来相对一致.但是,在较小的字体上,抗锯齿效果不好.
或者,您可以使用TextRenderer代替Graphics.DrawString. TextRenderer使用旧的GDI渲染(而不是像Graphics类那样使用GDI),因此它根本不进行子像素渲染-每个字符为9像素宽,或者每个字符为10像素宽.有时,较旧的技术会更好.
内容总结
以上是互联网集市为您收集整理的c#-使用DrawString()正确绘制文本全部内容,希望文章能够帮你解决c#-使用DrawString()正确绘制文本所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。