Visor sencillo de imágenes en VB (2)

Visor de imágenes con tareas muy sencillas de edición, añadiendo navegación por árbol de unidades y directorios y un botón que abre una página web con el código, en Visual Studio 2017 con VB

En este ejercicio realizado con Visual Studio 2017 se intenta complicar el ejercicio anterior añadiendo otras características:

  • Seleccionar la imagen desde un árbol de lista donde se muestran las unidades de disco y los directorios, usando ComboBox, TreeNode, GetDirectories
  • Añadir un botón que abre una página web en la que se muestra el código VB del formulario principal
  • Añadir un botón que muestra un diálogo Acerca de

Además de algunas características vistas en el ejercicio anterior:

  • 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.

Ver unidades de disco del sistema

Al arrancar el programa, el ComboBox se rellena con un array que contiene las unidades obtenidas desde GetLogicalDrives de System.Environment y se muestra la primera unidad seleccionando el primer ítem del array:

Me.CancelButton = Me.btSalir
'rellenar el Combobox con las letras de unidad del sistema:'
'array de cadenas para contener los nombres de las unidades'
Dim drives() As String
'rellenar el array con las unidades lógicas del sistema'
drives = System.Environment.GetLogicalDrives()
'rellenar el Combobox dese el array'
Me.cbDrive.Items.AddRange(drives)
'mostrar la letra de la primera unidad para que no arranque vacío el Combobox'
Me.cbDrive.SelectedItem = Me.cbDrive.Items(0)


Al elegir un ítem en el ComboBox se obtienen los directorios de la unidad seleccionada utilizando Directory.Info y GetDirectories y se rellena un TreeView con nodos que son las carpetas encontradas:

'la clase DirectoryInfo expone métodos de instancia para _'
'crear, mover y enumerar archivos en directorios y subdirectorios; _'
'se utiliza DirectoryInfo para operaciones típicas como copiar, _'
'mover, cambiar de nombre, enumerar, crear y eliminar directorios. _'
'obtener los directorios de la unidad seleccionada;'
Dim combo As New DirectoryInfo(Me.cbDrive.Text)
Dim carpetas() As DirectoryInfo
carpetas = combo.GetDirectories()
'limpiar el Treeview'
tvDir.Nodes.Clear()
'rellenar el Treeview con los nombres de los directorios;'
'TreeNode representa a los nodos del Treeview'
Dim carpetas2 As DirectoryInfo
Dim nodo As TreeNode
For Each carpetas2 In carpetas
	 'el constructor de la clase Treenode inicializa una nueva instancia'
	 'aquí se usa con 1 solo parámetro: el texto de etiqueta especificado'
	 nodo = New TreeNode(carpetas2.FullName)
	 Me.tvDir.Nodes.Add(nodo)
Next


Después se rellena un control ListView con los archivos encontrados en la carpeta seleccionada, filtrando por las extensiones .bmp / .jpg / .jpg / .tiff:

'rellenar el Listview con los nombres de los archivos'
'que cumplan la condición: terminar por las extensiones '
'de archivos de imagen (se pueden cambiar las que aparecen aquí)'
Dim imagen As FileInfo
For Each imagen In archivos
'a cada extensión se le puede asignar una imagen diferente eb el Imagelist'
   Select Case imagen.Extension
      Case ".BMP", ".bmp", ".JPG", ".JPEG", ".jpg", ".jpeg", ".PNG", ".png", ".TIFF", ".tiff", ".TIF", ".tif"
      Me.lvImg.Items.Add(imagen.Name)
   End Select
Next
End If


Mostrar dimensiones de la imagen

Se muestran las dimensiones de la imagen (ancho x alto) en una etiqueta usando las propiedades Image.Width e Image.Height:

'mostrar información sobre ancho y alto de la imagen seleccionada'
Me.lbImg.Text = "Ancho de imagen: " + pbImg.Image.Width.ToString + _
     " px.  /  Alto de imagen: " + pbImg.Image.Height.ToString + " px"


Tareas simples de edición y copiado al portapapeles

Son las que ya se han utilizado en el ejercicio anterior por lo que no se repetirán aquí. Consulta el código de la aplicación, se puede descargar al final.

Abrir una ventana del navegador con el código VB

  • Obtener la ruta a la aplicación con Application.StartupPath
  • Añadir a la ruta el nombre del archivo HTML
  • ProcessStartInfo se usa para iniciar procesos, aquí sirve para abrir el archivo con la propiedad FileName
  • Antes de mostrar el código se abre un cuadro de mensaje con información:
'Obtener la ruta a la carpeta desde la que se ha iniciado la aplicación'
Dim stRuta As String = Application.StartupPath
'ProcessStartInfo se utiliza para iniciar procesos'
Dim abrirDoc As ProcessStartInfo = New ProcessStartInfo
'Añadir a la ruta "\emiFotos 2.html" para abrir el archivo'
abrirDoc.FileName = stRuta + "\emiFotos 2.html"
'modo de apertura de archivo (también puede ser edit, print...)'
abrirDoc.Verb = "open"
'abrir en ventana normal'
abrirDoc.WindowStyle = ProcessWindowStyle.Normal
'Abrir el archivo mediante su programa asociado en Windows'
Process.Start(abrirDoc)


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.