Colabora
 

Mostrar imágenes sin perder proporción

Como cargar imágenes en un componente image sin perder la proporción de alto y ancho

 

Fecha: 15/Oct/2008 (09-10-08)
Autor: Mariano Torres - [email protected]

 


Introducción

En este articulo se muestra la forma de cargar imagenes en un componente image sin que se pierda la proporcion de altura y anchura de la imagen. Opcionalmente se puede centrar para que de una mejor presentacion.

Contenido

Hasta ahora los metodos que encontre para centrar imagenes en Visual Basic 6 incluian llamadas a API's del sistema, no es complicado para programadores intermedio y avanzados. Y los pocos ejemplos que no incluian API's, eran ejemplos para VB.Net. Por eso me di a la tarea de buscar un metodo mas sencillo, sin entrar al manejo de API's, pensando en programadores de nivel basicos, y programadores que gusten de simplicidad de codigo.

Colocando un componente image dentro de un picture, y usando unas pocas lineas de codigo, se puede ajustar la imagen sin perder su proporcion de altura y anchura.

El el codigo de ejemplo, la subrutina la llamo desde dos eventos diferentes: desde el evento Form_Resize, y el evento File1_Click

El código:

Sub CentrarImagen()
    'Variable que almacenara la proporcion a reducir
    Dim Prop As Double

    'Dejamos que la imagen se amplie a su tamaño original
    'Esto es necesario para calcular la proporcion a reducir de la imagen
    Image1.Stretch = False

    'Calculamos la proporcion de lo ancho
    Prop = Picture1.Width / Image1.Width

    'Si la proporcion de lo alto es menor, tomanos esa nueva proporcion
    If (Picture1.Height / Image1.Height) < Prop Then
        Prop = Picture1.Height / Image1.Height
    End If
	
    'Reducimos la imagen con la proporcion calculada
    Image1.Width = Image1.Width * Prop
    Image1.Height = Image1.Height * Prop

    'Opcionalmente podemos centrar la imagen dentro del picture
    'Si no se quiere centrar, comentamos las siguientes 2 lineas
    Image1.Top = (Picture1.Height - Image1.Height) / 2
    Image1.Left = (Picture1.Width - Image1.Width) / 2
    
    'Ajustamos la imagen al control image
    Image1.Stretch = True


End Sub

Nota:
Reemplazar el nombre del control image1 y picture1 por los nombres de tus controles image y picture respectivamente que tu proyecto

 

Comentarios adicionales

En el primer proyecto que implemente este codigo, por alguna extraña razon las propiedades Picture1.Height y Picture.Width me devolvian un valor de 0, obviamente la imagen no me aparecia. Si este es tu caso, unicamente fijate el valor de alto y ancho de tu componente Picture y lo colocas directamente en el codigo, en los lugares correspondientes.




Compromiso del autor del artículo con el sitio del Guille:

Lo comentado en este artículo está probado (y funciona) con la siguiente configuración:

El autor se compromete personalmente de que lo expuesto en este artículo es cierto y lo ha comprobado usando la configuración indicada anteriormente.

En cualquier caso, el Guille no se responsabiliza del contenido de este artículo.

Si encuentras alguna errata o fallo en algún link (enlace), por favor comunícalo usando este link:

Gracias.


Código de ejemplo (comprimido):

 

Fichero con el código de ejemplo: n1mte_imagenes_vb6.zip - 275.00 KB

(MD5 checksum: 62BC742DE9688D800C09AE5F3DF16313)

 


Ir al índice principal de el Guille