如何绘制没有填充的字符串

9

我正在使用GraphicsPath.AddString()函数,但它会在文本周围绘制一些空白。有什么办法可以只绘制文本路径而不带有填充?

我的代码如下:

GraphicsPath gp = new GraphicsPath();

gp.AddString(text, font.FontFamily, (int)font.Style, font.Size,
    boundsRectangle, format);

g.DrawPath(pen, gp);

2
你在StringFormat参数的FormatFlags中设置了什么? - plinth
感谢plinth的回复,StringFromat是_format = StringFormat.GenericDefault;有什么方法可以通过标志解决问题吗? - MHMr
https://dev59.com/zXVD5IYBdhLWcg3wAWoO - Ken Kin
你可以发布一张快照吗?空间有多大? - King King
1个回答

3
正在发生的是,在幕后它可能使用了Graphics.MeasureString(),来自文档:
GDI+在每个显示的字符串的每端添加了一小部分(1/6 em)。这1/6 em允许对具有悬挂末端的字形(例如斜体“f”)进行操作,并且还为GDI+提供了一些余地以帮助网格拟合扩展。
DrawString的默认操作将会使你在显示相邻运行时遇到困难: 首先,默认的StringFormat在每个输出的末端都会添加额外的1/6 em; 其次,当网格拟合宽度小于设计值时,字符串可以收缩多达一个em。 为了避免这些问题:
始终基于印刷排版StringFormat(GenericTypographic)传递MeasureString和DrawString的StringFormat。 将Graphics TextRenderingHint设置为TextRenderingHintAntiAlias。该呈现方法使用抗锯齿和子像素字形定位来避免需要网格拟合,因此本质上是分辨率独立的。
因此,看起来您应该能够通过使用正确的StringFormat来解决此问题。

很遗憾,这个方法不起作用。它去掉了水平填充,但是垂直填充仍然存在。 - BlueRaja - Danny Pflughoeft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接