Vous êtes sur la page 1sur 7

Visor de imgenes en C# y VBasic .

NET
[Sencillo visor de imgenes BMP y JPG con funciones simples de edicin y copiado al portapapeles]
Fecha: 16/Ago/2003 (15/Ago/2003) Autor: Emilio Prez Egido - emi@miliuco.com

Este es un ejercicio apto para programadores poco avanzados, en el que utilizaremos: - algunos mtodos de manipulacin simple de imgenes como el giro y el "flip" de una imagen (rotateFlip de System.Drawing.RotateFlipType) y el ajuste de la imagen a su PictureBox (enumeracinPictureBoxSizeMode). - mtodo de copiado al portapapeles mediante SetDataObject de la clase Clipboard. - arranque de otra aplicacin (navegador de Internet, en este caso concreto) mediante el uso de Process.Start de System.Diagnostics y la funcin StartupPath de la clase Application (que devuelve el directorio desde el que se ha iniciado la aplicacin, en forma de ruta absoluta que termina en la carpeta contenedora). - una barra de deslizamiento vertical VScrollBar a cuyo valor asignaremos las medidas de ancho y de alto del PictureBox que contiene la imagen para conseguir un efecto de zoom. - cdigo de proteccin contra errores de tipo clsico mediante construcciones cortas que dicen al programa cmo actuar en determinadas circunstancias, por ejemplo usando 'para que solamente lo haga si hay imagen en la caja de imagen If Not pbxImg.Image Is Nothing Then - cdigo de proteccin contra errores especfico de Visual Basic, usando Try...Catch.

Cdigo fundamental del programa:


Este ejercicio est referido a Visual Basic .NET, pero existe un ejercicio similar en C# (ver enlace al final del documento). A continuacin sigue cdigo en Visual Basic: ' VISOR DE IMAGENES EN VISUAL BASIC .NET ' Miliuco - 03/08/2003

Imports Imports Imports Imports Imports Imports Imports

System System.Drawing System.Drawing.Imaging System.Windows.Forms System.Text System.IO System.Diagnostics

Public Class Form1 Inherits System.Windows.Forms.Form #Region " Cdigo generado por el Diseador de Windows Forms " #End Region ' Variable para ser utilizada en el mtodo btAbrir_Click Dim nombreImg As String = "" 'Al cargar el formulario Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load lbImg.Text = "Ninguna imagen cargada" lbImg2.Text = "" End Sub 'Mover la barra de desplazamiento vertical Private Sub VScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles VScrollBar1.Scroll 'entero para almacenar el valor de la barra de desplazamiento Dim imgZoom As Single = VScrollBar1.Value 'para que solamente lo haga si hay imagen en la caja de imagen If Not pbxImg.Image Is Nothing Then 'cdigo para que la caja de imagen sea redimensionada 'manteniendo el modo de colocacin de la imagen: centrada o ajustada If (pbxImg.SizeMode = PictureBoxSizeMode.StretchImage) Then pbxImg.Width = (456 * imgZoom) \ 100 pbxImg.Height = (304 * imgZoom) \ 100 End If If (pbxImg.SizeMode = PictureBoxSizeMode.Normal) Then pbxImg.Width = (456 * imgZoom) / 100 pbxImg.Height = (304 * imgZoom) / 100 End If End If 'Recarga la imagen pbxImg.Refresh() End Sub 'Para abrir un archivo Private Sub mnAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnAbrir.Click

dlgFile = New OpenFileDialog dlgFile.Filter = "Imgenes JPG (*.jpg)|*.jpg|Mapas de bits (*.bmp)|*.bmp" dlgFile.Title = "Abre una imagen JPG o BMP" If dlgFile.ShowDialog() = DialogResult.OK Then nombreImg = dlgFile.FileName pbxImg.Image = Image.FromFile(nombreImg) pbxImg.SizeMode = PictureBoxSizeMode.StretchImage lbImg.Text = nombreImg VScrollBar1.Enabled = True lbImg2.Text = "Ancho de imagen: " + pbxImg.Image.Width.ToString + _ " px. / Alto de imagen: " + pbxImg.Image.Height.ToString + " px" End If End Sub 'Vaciar la caja de imagen y la etiqueta de informacin Private Sub mnCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnCerrar.Click 'para que solamente lo haga si hay imagen en la caja de imagen If Not pbxImg.Image Is Nothing Then pbxImg.Image = Nothing lbImg.Text = "Ninguna imagen cargada" lbImg2.Text = "" VScrollBar1.Enabled = False End If End Sub 'Para guardar el archivo en otro formato (BMP a JPG, JPG a BMP) Private Sub mnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnGuardar.Click 'para que solamente lo haga si hay imagen en la caja de imagen If Not pbxImg.Image Is Nothing Then dlgSave = New SaveFileDialog dlgSave.Filter = "Mapas de bits (*.bmp)|*.bmp|Imgenes JPG (*.jpg)|*.jpg" dlgSave.Title = "Guarda como imagen JPG o BMP" If dlgSave.ShowDialog() = DialogResult.OK Then nombreImg = dlgSave.FileName 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 End If End If End Sub 'Salir Private Sub mnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSalir.Click 'End Close() End Sub

'Salir Private Sub mnSalir2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSalir2.Click 'End Close() End Sub 'Para copiar la imagen al protapapeles Private Sub mnCopiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnCopiar.Click 'para que solamente lo haga si hay imagen en la caja de imagen If Not pbxImg.Image Is Nothing Then Call fnClipboard() 'funcin detallada en el siguiente bloque End If End Sub 'Funcin que devuelve un objeto desde el portapapeles. 'La clase ClipBoard deriva de la clase Object y tiene 3 miembros: 'constructor / GetDataObject / SetDataObject Private Function fnClipboard() As Object 'Copiar imagen al portapeles 'SetDataObject lleva 2 parmetros (objeto, booleano) 'Si booleano es true, el objeto queda en el portapapeles 'despus de haber cerrado la aplicacin 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 'Para mostrar la imagen a tamao real 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.Normal End If End Sub 'Para ajustar la imagen Private Sub mnAjustar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnAjustar.Click 'para que solamente lo haga si hay imagen en la caja de imagen If Not pbxImg.Image Is Nothing Then pbxImg.SizeMode = PictureBoxSizeMode.StretchImage End If End Sub 'Men que voltea horizontalmente la imagen Private Sub mnFlip_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnFlip.Click 'para que solamente lo haga si hay imagen en la caja de imagen If Not pbxImg.Image Is Nothing Then pbxImg.Image.RotateFlip(RotateFlipType.RotateNoneFlipX) pbxImg.Refresh() 'Recarga la imagen End If

End Sub 'Para girar la imagen 180 grados Private Sub mnGirar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnGirar.Click 'para que solamente lo haga si hay imagen en la caja de imagen If Not pbxImg.Image Is Nothing Then pbxImg.Image.RotateFlip(RotateFlipType.Rotate180FlipX) pbxImg.Refresh() 'Recarga la imagen End If End Sub 'Men que voltea verticalmente la imagen Private Sub mnFlip2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnFlip2.Click 'para que solamente lo haga si hay imagen en la caja de imagen If Not pbxImg.Image Is Nothing Then pbxImg.Image.RotateFlip(RotateFlipType.RotateNoneFlipY) pbxImg.Refresh() 'Recarga la imagen End If End Sub 'Mostrar el cdigo del programa Private Sub mnCode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnCode.Click 'Obtener la ruta a la carpeta desde la que se ha iniciado la aplicacin, Dim stRuta As String = Application.StartupPath Try ' para detectar y manipular excepciones (errores del programa) 'ProcessStartInfo se utiliza para iniciar procesos Dim abrirDoc As ProcessStartInfo = New ProcessStartInfo 'Aadir a la ruta "\Visor de Imagen.html" para abrir el archivo abrirDoc.FileName = stRuta + "\Visor de imgenes.html" 'Informacin al usuario de la ruta obtenida en su sistema MessageBox.Show("La ruta a tu archivo ""Visor de imgenes.html"" parece ser:" _ + vbCrLf + vbCrLf + abrirDoc.FileName, "Archivo Visor de imgenes.html", _ MessageBoxButtons.OK) 'modo de apertura de archivo (tambin 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) Catch a As Exception 'Objeto Exception de nombre a 'Mensaje relativo a la excepcin lanzada MessageBox.Show("Se ha producido la siguiente excepcin:" _ + vbCrLf + vbCrLf + a.Message, "Mensaje de error") End Try End Sub

'Caja de mensaje Acerca de... Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click MessageBox.Show("Visor de imgenes realizado en Visual Basic. Autor: MILIUCO. Fecha: 03/08/2003" _ + vbCrLf + "El archivo ""Visor de imgenes.html"" debe estar en la misma carpeta que el ejecutable" _ + " de la aplicacin.", "Acerca de...", MessageBoxButtons.OK) End Sub End Class

Como resumen, con este ejercicio se toma contacto con mtodos interesantes para el usuario no experto: manipulacin de imgenes (rotateFlip de System.Drawing.RotateFlipType y otros). copiado al portapapeles (SetDataObject de la clase Clipboard). arranque de otra aplicacin (Process.Start de System.Diagnostics).

Imagen del programa en funcionamiento:

La foto es de mi querido perro Mil durante mis vacaciones en la costa de Mlaga (saludos, Guille ;-) La imagen corresponde al programa en C#, el programa en VBasic es prcticamente igual con el aadi

Vous aimerez peut-être aussi