德中技术 2024-06-18 17:09 采纳率: 0%
浏览 14

GDI+ path的绘制文本 文本的绘制点与实际显示点存在间距怎么解决?

GDI+ path的绘制文本 文本的绘制点与实际显示点存在间距怎么解决?

十字标为文本的绘制点,Text的外层的矩形为包围盒,可以看到包围盒的左上角与绘制点存在间距 怎么消除这部分的间距?

img

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2024-06-18 17:13
    关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    在GDI+中,文本的绘制点与实际显示点之间存在间距,这是因为在绘制文本时,系统默认会为文本周围的包围盒预留一些空间。如果希望消除这部分的间距,可以采用以下几种方法解决:

    1. 设置文字对齐方式:可以使用Graphics对象的TextRenderingHint属性来设置文字的对齐方式,例如使用TextRenderingHintAntiAliasGridFit来获得更准确的文本绘制位置。

    2. 调整绘制点的位置:可以通过微调绘制点的位置来消除间距。比如,根据实际情况,可以使用Graphics对象的TranslateTransform方法来平移绘制点的位置,使其更贴近实际显示点。

    3. 设置文本的边界框:可以通过更精确地计算文本的边界框来消除间距。使用Graphics对象的MeasureString方法可以获得文本的边界框大小,然后使用这个大小来绘制文本。

    4. 使用GraphicsPath绘制:可以使用GraphicsPath对象来绘制文本。GraphicsPath对象可以更准确地描述文本的形状,从而避免默认的空间预留问题。

    例子代码如下:

    using (GraphicsPath path = new GraphicsPath())
    {
        path.AddString("Hello", FontFamily.GenericSansSerif, (int)FontStyle.Regular, 32, new Point(0, 0), StringFormat.GenericDefault);
    
        Graphics graphics = CreateGraphics();
        graphics.SmoothingMode = SmoothingMode.AntiAlias;
    
        RectangleF bounds = path.GetBounds(graphics);
    
        // 调整绘制点的位置
        float xOffset = bounds.Left - bounds.X;
        float yOffset = bounds.Top - bounds.Y;
        graphics.TranslateTransform(-xOffset, -yOffset);
    
        // 绘制文本
        graphics.FillPath(Brushes.Black, path);
    }
    

    使用上述方法可以消除GDI+绘制文本时,绘制点与实际显示点之间的间距。希望对你有帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 6月18日