Tengo un método que dibuja un rectángulo redondeado con un borde. La frontera puede ser cualquier anchura, por lo que el problema que estoy teniendo es la frontera es de extender más allá de los límites fijados, cuando es gruesa, ya que se dibuja desde el centro de un camino.

¿Cómo puedo incluir el ancho de la frontera, así que encaja perfectamente en los límites fijados?

Este es el código que estoy usando para dibujar el rectángulo redondeado.

private void DrawRoundedRectangle(Graphics gfx, Rectangle Bounds, int CornerRadius, Pen DrawPen, Color FillColor)
{
    GraphicsPath gfxPath = new GraphicsPath();

    DrawPen.EndCap = DrawPen.StartCap = LineCap.Round;

    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);
}
InformationsquelleAutor Dylan Vester | 2009-03-09

1 Comentario

  1. 30

    Bien chicos, me lo imaginé! Sólo necesita reducir los límites a tener en cuenta la anchura de la pluma. Yo sabía que esta era la respuesta que me preguntaba si había una manera de dibujar una línea en el interior de una ruta de acceso. Esto funciona bien.

    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);
    }

Dejar respuesta

Please enter your comment!
Please enter your name here