You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取GraphicsPath绘制的描边文本的准确尺寸?

解决描边文本与普通文本尺寸不一致及准确测量问题

我开发了一个将PictureBox中位图作为文本对象的程序,目前除描边文本外,其他功能(包括自动换行)都已实现。

描边文本绘制代码

我通过GraphicsPath实现描边文本绘制:

private void DrawOutlineString(string text, PointF pos)
{
    Graphics g = Graphics.FromImage(image);
    SolidBrush b = new(forecolor);
    Pen pen = new(outlinecolor, outlinesize);
    GraphicsPath gp = new();
    gp.AddString(text, fontfamily, (int)fontstyle, g.DpiY 
        * fontsize / 72, pos, new StringFormat());
    g.DrawPath(pen, gp);
    g.FillPath(b, gp);
    gp.Dispose();
    pen.Dispose();
    b.Dispose();
    g.Dispose();
}

该方法先创建包含字体信息的文本路径,再通过DrawPath(描边)和FillPath(填充)完成绘制,描边粗细由Pen的厚度决定。

遇到的问题

用上述方式绘制的文本,尺寸和DrawString绘制的普通文本不一致。我尝试给MeasureString的结果直接增加两倍描边宽度来计算描边文本尺寸,但完全无效:

private SizeF GetTextSize(string text)
{
    Graphics g = Graphics.FromImage(image);
    SizeF size = g.MeasureString(text, font);
    g.Dispose();
    return size;
}

private SizeF GetOutlineTextSize(string text)
{
    SizeF size = GetTextSize(text);
    size.Width += outlinesize * 2;
    size.Height += outlinesize * 2;
    return size;
}

问题原因

MeasureString仅计算文本字形本身的边界,而描边是沿字形路径向外扩展的。不同字形的边角、粗细变化会导致描边的实际扩展范围并非均匀的“原尺寸+两倍描边宽度”,简单加减必然产生误差。

正确的测量方法

通过GraphicsPath.GetBounds(null, pen)方法可以准确计算包含描边的文本尺寸——该方法会结合Pen的宽度,计算出路径(含描边)实际占据的边界。优化后的测量代码如下(建议用using自动释放资源,避免内存泄漏):

private SizeF GetOutlineTextSize(string text)
{
    using (Graphics g = Graphics.FromImage(image))
    using (Pen p = new Pen(outlinecolor, outlinesize))
    using (GraphicsPath gp = new GraphicsPath())
    {
        // 确保与DrawOutlineString使用完全一致的字体、字号、格式参数
        gp.AddString(text, fontfamily, (int)fontstyle, g.DpiY * fontsize / 72, PointF.Empty, new StringFormat());
        // 传入Pen参数,让GetBounds计算包含描边的完整边界
        RectangleF rect = gp.GetBounds(null, p);
        return new SizeF(rect.Width, rect.Height);
    }
}

注意:必须保证测量时使用的fontfamily、fontstyle、fontsize、StringFormat等参数和绘制描边文本时完全一致,否则尺寸计算仍会有偏差。

内容的提问来源于stack exchange,提问作者woodmage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:10:22