es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué se produce un ángulo cuadrado al dibujar una elipse en C#?

La razón por la que hago esta pregunta se muestra en la siguiente imagen:

Captura de pantalla que ilustra visualmente el problema en la pregunta

Por alguna razón, al dibujar una elipse utilizando System.Drawing, se produce un ángulo cuadrado. A continuación, puedes ver cómo lo he dibujado. No he encontrado la solución PERO en un video (cómo hacer un editor gráfico simple), aparece un ángulo cuadrado durante el dibujo de una elipse y luego desaparece. Código completo: https://pastebin.com/465eD7Zf. Probado en NET Framework 4.7.2 y .NET 5. FillRectangle funciona.

private void paintBox_MouseMove(object sender, MouseEventArgs e)
{
    if (draw)
    {
        Graphics g = paintBox.CreateGraphics();
        Item currItem = (Item)choice.SelectedItem;

        switch (currItem)
        {
            case Item.Rectangle:
                g.FillRectangle(new SolidBrush(showColor.BackColor), x, y, e.X - x, e.Y - y);
                break;
            case Item.Ellipse:
                g.FillEllipse(new SolidBrush(showColor.BackColor), x, y, e.X - x, e.Y - y); // ???
                break;

        }
        g.Dispose();
    }
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución al problema de dibujo de elipses en C

    El problema de que se produzca un ángulo cuadrado durante el dibujo de una elipse utilizando System.Drawing en C# se puede resolver modificando el código para dibujar la elipse. En lugar de utilizar el método FillEllipse, se puede utilizar el método DrawEllipse junto con la configuración de la propiedad Pen.Width a 1. Esto eliminará el problema del ángulo cuadrado al dibujar la elipse.

    Código modificado:

    case Item.Ellipse:
        using (Pen pen = new Pen(new SolidBrush(showColor.BackColor), 1))
        {
            g.DrawEllipse(pen, x, y, e.X - x, e.Y - y);
        }
        break;
    

    Además, se recomienda utilizar la declaración using para eliminar el objeto Pen después de su uso y evitar fugas de memoria.

Comments are closed.