Visor de imágenes con tareas muy sencillas de edición y copiado al portapapeles realizado en Visual Studio 2017 con VB
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.