PictureBox redondo en VB .NET

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 VB .NET

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:

Private Sub GraphicsPath.AddEllipse(New Rectangle(x, y, ancho, alto))
'
Public Sub DrawPath ( pen As Pen, path As GraphicsPath )

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 Visual Basic .NET

Importamos los espacios de nombres:

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging

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 Sub Captura_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
	' 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
	Dim curra As GraphicsPath = New GraphicsPath
	' Manipulando las variables que se corresponden con los puntos x.y, ancho y alto de la figura podemos variar su aspecto
	Dim x, y, ancho, alto As Integer
	' 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ículo)
	' 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
	Dim reg As Region
	reg = New Region(curra)
	PBox1.Region = reg
	' Otra forma de realizarlo
	'pBox.Region = New Region(curra)
End Sub

Código de ejemplo en Visual Studio 2017 desde aquí.