How to draw rounded rectangle with variable width border inside of specific bounds

前端 未结 1 1539
暗喜
暗喜 2020-12-15 05:49

I have a method that draws a rounded rectangle with a border. The border can be any width, so the problem I\'m having is the border is extending past the given bounds when i

相关标签:
1条回答
  • 2020-12-15 06:12

    Alright guys, I figured it out! Just need to shrink the bounds to take into account the width of the pen. I kind of knew this was the answer I was just wondering if there was a way to draw a line on the inside of a path. This works good though.

    private void DrawRoundedRectangle(Graphics gfx, Rectangle Bounds, int CornerRadius, Pen DrawPen, Color FillColor)
    {
        int strokeOffset = Convert.ToInt32(Math.Ceiling(DrawPen.Width));
        Bounds = Rectangle.Inflate(Bounds, -strokeOffset, -strokeOffset);
    
        DrawPen.EndCap = DrawPen.StartCap = LineCap.Round;
    
        GraphicsPath gfxPath = new GraphicsPath();
        gfxPath.AddArc(Bounds.X, Bounds.Y, CornerRadius, CornerRadius, 180, 90);
        gfxPath.AddArc(Bounds.X + Bounds.Width - CornerRadius, Bounds.Y, CornerRadius, CornerRadius, 270, 90);
        gfxPath.AddArc(Bounds.X + Bounds.Width - CornerRadius, Bounds.Y + Bounds.Height - CornerRadius, CornerRadius, CornerRadius, 0, 90);
        gfxPath.AddArc(Bounds.X, Bounds.Y + Bounds.Height - CornerRadius, CornerRadius, CornerRadius, 90, 90);
        gfxPath.CloseAllFigures();
    
        gfx.FillPath(new SolidBrush(FillColor), gfxPath);
        gfx.DrawPath(DrawPen, gfxPath);
    }
    
    0 讨论(0)
提交回复
热议问题