【问题标题】:How to draw a string without padding如何在没有填充的情况下绘制字符串
【发布时间】:2013-03-26 14:36:47
【问题描述】:

我正在使用GraphicsPath.AddString() 函数,但它会在文本周围留出一点空间来绘制文本。知道如何在没有填充的情况下绘制字符串,只有文本的路径?

我的代码是这样的:

GraphicsPath gp = new GraphicsPath();

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

g.DrawPath(pen, gp);

【问题讨论】:

  • 你在StringFormat参数的FormatFlags中设置了什么?
  • 感谢 plinth 的回复,StringFromat 是 _format = StringFormat.GenericDefault;有什么东西可以解决flags中的问题吗?
  • 你能发个快照吗?空间有多大?

标签: c# .net gdi ownerdrawn


【解决方案1】:

正在发生的事情是它可能正在使用 Graphics.MeasureString(),来自文档:

GDI+ 在显示的每个字符串的每一端添加少量 (1/6 em)。这个 1/6 em 允许 > 用于具有悬垂末端的字形(例如斜体“f”),并且还为 GDI+ 提供了少量 > 空间来帮助网格拟合扩展。

DrawString 的默认操作将在显示相邻的运行时对您不利:

首先,默认的 StringFormat 在每个输出的每一端添加一个额外的 1/6 em; 其次,当网格拟合宽度小于设计时,允许字符串收缩 最多一个 em。 为避免这些问题:

始终根据印刷 >StringFormat (GenericTypographic) 传递 MeasureString 和 DrawString 一个 StringFormat。 将图形 TextRenderingHint 设置为 TextRenderingHintAntiAlias。这种渲染方法 > 使用抗锯齿和亚像素字形定位来避免网格拟合的需要,因此 > 本质上与分辨率无关。

所以看起来你应该能够使用正确的 StringFormat 来解决这个问题。

【讨论】:

  • 不幸的是,这不起作用。它删除了水平填充,但垂直填充仍然存在。
猜你喜欢
  • 1970-01-01
  • 2022-11-22
  • 2021-01-12
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 2015-02-19
  • 2020-09-13
  • 1970-01-01
相关资源
最近更新 更多