Visor de imágenes en VB .NET 2017 (1)

Visor de imágenes con tareas muy sencillas de edición y copiado al portapapeles realizado en Visual Studio 2017

En este sencillo ejercicio (tiene una versión mejorada aquí) realizado con Visual Studio 2017 se muestran varias tareas que se pueden realizar con imágenes en Visual Basic .NET:

  • Abrir un archivo de imagen utilizando la construcción With en OpenFileDialog
  • Convertir la imagen a otro formato (BMP a JPG y viceversa)
  • Copiar la imagen al portapapeles usando la clase ClipBoard
  • Cambiar el modo de mostrar la imagen con la propiedad PictureBoxSizeMode.

Abrir el archivo de imagen

Desde las primeras versiones de .NET se ha utilizado este código para abrir un archivo en VB:

 dlgFile = New OpenFileDialog
 dlgFile.Filter = "Imágenes JPG (*.jpg)|*.jpg|Mapas de bits (*.bmp)|*.bmp"
 dlgFile.Title = "Abre una imagen JPG o BMP"

Pero aquí se emplea una manera más moderna de hacerlo con With:

dlgFile = New OpenFileDialog With {
.Filter = "Imágenes JPG (*.jpg)|*.jpg|Mapas de bits (*.bmp)|*.bmp",
.Title = "Abre una imagen JPG o BMP"
}


Guardar la imagen en otro formato

Desde SaveFileDialog se usa pbxImg.Image.Save para elegir el formato en que se va a guardar la imagen (BMP como JPG y JPG como BMP):

If (nombreImg.EndsWith("jpg")) Then
   pbxImg.Image.Save(nombreImg, ImageFormat.Jpeg)
End If
If (nombreImg.EndsWith("bmp")) Then
   pbxImg.Image.Save(nombreImg, ImageFormat.Bmp)
End If


Copiar la imagen al portapapeles

Se crea una función que devuelve un objeto desde el portapapeles. La clase ClipBoard deriva de la clase Object y tiene 2 miembros que se utilizan aquí: SetDataObject para enviar la imagen al portapapeles y GetDataObject para pegarla desde allí:

Private Function FnClipboard() As Object
        'Copiar imagen al portapeles
        'SetDataObject lleva 2 parámetros (objeto, booleano)
        'Si booleano es true, el objeto queda en el portapapeles
        'después de haber cerrado la aplicación
        Clipboard.SetDataObject(pbxImg.Image, True)
        'Variable objClipboard para contener el portapeles
        Dim objClipboard As IDataObject = Clipboard.GetDataObject()
        'devuelve el portapapeles como mapa de bits
        Return objClipboard.GetData(DataFormats.Bitmap)
End Function


Cambiar el modo de mostrar la imagen

Se usa la propiedad SizeMode del objeto PictureBox para mostrar la imagen de 3 formas diferentes:
– ajustada a la ventana manteniendo proporciones (PictureBoxSizeMode.Zoom)
– ajustada al tamaño del PictureBox (PictureBoxSizeMode.StretchImage)
– centrada a tamaño real (PictureBoxSizeMode.CenterImage).

Por ejemplo para mostrarla ajustada a la ventana sin cambiar proporciones:

'Para mostrar la imagen ajustada a la ventana con sus proporciones originales
Private Sub MnReal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnReal.Click
        'para que solamente lo haga si hay imagen en la caja de imagen
        If Not pbxImg.Image Is Nothing Then
            pbxImg.SizeMode = PictureBoxSizeMode.Zoom
        End If
End Sub


Aplicación completa en Visual Studio 2017

Descargar el archivo ZIP.

Nota: el ajuste automático de escala del formulario que muestra la ventana de la aplicación se puede configurar de varias maneras, lo tienes en las propiedades del formulario como AutoScaleMode, la opción con la que obtengo el mejor resultado es con Dpi.