PictureBox sobre el que se dibuja una región de recorte de forma circular con el método GraphicsPath.AddEllipse para obtener una imagen redonda, en C# y VB
Tienes una versión más compleja de este ejercicio aquí.
Clase GraphicsPath
La clase GraphicsPath del espacio de nombres System.Drawing.Drawing2D tiene objetos que representan figuras (líneas y curvas conectadas). Las aplicaciones usan estas secuencias de datos con líneas y curvas (path) para dibujar los bordes o rellenar el interior de las figuras y crear zonas de recorte. El motor gráfico mantiene las coordenadas de las figuras geométricas en objetos path que pueden estar formados a su vez por otras figuras (subpath).
Cada figura se compone de:
- líneas y curvas
- figura geométrica
El punto de comienzo de una figura es el primer punto en la secuencia de líneas y curvas conectadas. A efectos de relleno y recorte, todas las figuras aparecen como cerradas, añadiendo una línea del punto final al punto inicial. Algunos miembros de la clase GraphicsPath son:
- constructor GraphicsPath – inicializa una nueva instancia de la clase GraphicsPath.
- FillMode – obtiene o configura una enumeración FillMode que determina cómo se rellena el interior de las figuras en el objeto GraphicsPath.
- PathData – encapsula una matriz de puntos y tipos para el objeto GraphicsPath.
- AddArc – añade un arco elíptico.
- AddClosedCurve – añade una curva cerrada.
- AddCurve – añade una curva.
- AddEllipse – añade una elipse.
- AddLine – añade una línea.
- AddLines – añade una serie de líneas.
- AddPath – añade un objeto GraphicsPath.
- AddPolygon – añade un polígono.
- AddRectangle – añade un rectángulo.
- AddRectangles – añade una serie de rectángulos.
Es posible dibujar un objeto GraphicsPath con alguno de los métodos listados más arriba o con el método Graphics.DrawPath:
GraphicsPath.AddEllipse(new Rectangle(x, y, ancho, alto)); DrawPath (System.Drawing.Pen pen, System.Drawing.Drawing2D.GraphicsPath path);
Parámetros que se pasan al método Graphics.DrawPath:
- pen: objeto que determina color, anchura y estilo del objeto path (del trazado).
- path: objeto GraphicsPath que va a ser dibujado.
Código en C#
Importamos los espacios de nombres:
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Windows.Forms;
Actuamos en el evento Paint del PictureBox (se consigue el mismo resultado actuando en el evento Paint del Formulario) > Creamos un objeto de la clase GraphicsPath > Usamos el método AddEllipse para conseguir la figura de un círculo que aplicaremos sobre el control PictureBox > En el control PictureBox creamos una región que se corresponde con la figura del objeto GraphicsPath > Manipulando unas variables enteras que se corresponden con los puntos x.y (ancho y alto de la figura) podemos variar su aspecto. Configuramos tanto el tamaño como la posición de la figura en el PictureBox.
//ACTUAMOS EN EL EVENTO PAINT DEL PICTUREBOX // El evento Paint se produce cada vez que se dibuja el formulario o cualquier otro control // Aquí se rellena el PictureBox con la imagen elegida recortando sobre ella un círculo // para crear la ventana del formulario que será copiada de formas diferentes y guardada como archivos JPG private void PBox1_Paint(object sender, PaintEventArgs e) { // Podemos mejorar el aspecto del borde redondeado aplicando antialias // Graphics.SmoothingMode obtiene o establece la calidad de la representación del objeto Graphics e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; // Creamos un objeto de la clase GraphicsPath que representa una serie de líneas y curvas conectadas GraphicsPath curra = new GraphicsPath(); // Manipulando las variables que se corresponden con los puntos x.y, ancho y alto de la figura podemos variar su aspecto int x = 0; int y = 0; int ancho = 0; int alto = 0; // Posiciones x.y del objeto curra (las del control PictureBox) x = PBox1.Left; y = PBox1.Top; // Anchura y altura del objeto curra, un poco menores que las del PictureBox para que se vea bien ajustado al control ancho = PBox1.Width - 24; alto = PBox1.Height - 24; // Usamos el método AddEllipse para agregar la forma de un círculo o elipse al trazado actual (el control PictureBox) curra.AddEllipse(new Rectangle(x, y, ancho, alto)); // En el PictureBox creamos una región que se corresponde con la forma del objeto GraphicsPath (círculo) // y se dibuja en el PictureBox asignando el objeto curra a la región // Region de System.Drawing describe el interior de una forma gráfica formada por rectángulos y trazados Region reg = default(Region); reg = new Region(curra); PBox1.Region = reg; // Otra forma de realizarlo //pBox.Region = New Region(curra) }
Puedes descargar un archivo ZIP con las aplicaciones C# y en VB.