Bien, imaginaos que teneis un recuadro donde vais a mostrar una serie de imagenes pero que no tienen todas las mismas dimensiones, pudiendo haber algunas con formanto de banner (barra horizontal) y otras en formato de poster (barra vertical).
La intención es mostrar todas las imagenes dentro de un cuadro de 640x480 sin que ninguna se salga de esos márgenes.
La forma más sencilla de fijar el tamaño del recuadro es con un Div (yo hace una semana no sabía ni que existía, asi que en un arranque de empatía lo voy a poner)
<DIV id="Recuadro" style="WIDTH: 640px; HEIGHT: 480px" align="center">
<asp:image id="Imagen" runat="server"></asp:image>
</DIV>
Dentro del Div colocamos la imagen. Como contamos con un buen número de imagenes la imageUrl de la misma es mejor no dejarla establecida, sino cambiarla mediante código (a no ser que querais poner una imagen de portada).
Con el Align del Div conseguimos que la imagen se quede centrada horizontalmente en el recuadro, pero ojo (y esta es la duda que me atormenta) no te centra la imagen verticalmente; por lo que si la imagen no ocupa los 480 pixeles, aparecerá antiestéticamente pegada a la parte superior, dejando un espacio vacío debajo suyo.
Pero eso habrá que solucionarlo después.
Primero hay que detectar si la imagen es vertical, horizontal o si es más pequeña que el recuadro.
En realidad, como el Div ya me soluciona la papeleta centrándome las imagenes verticales, lo unico que hace falta comprobar, de momento, es si la imagen se sale del recuadro establecido y si el ancho es mayor que el alto (lo cual significaría que estamos ante una imagen horizontal).
Para controlar el tamaño de la imagen vamos a usar las propiedades Height y Width, pero solo una a la vez. Si especificamos solo una de ellas, la imagen redimensionará la otra para mantener el aspecto original, lo cual nos viene que ni pintado.
Con esta funcion compruebo las dimensiones de una imagen y devuelvo qué parametro hay que dejar establecido.
' Obtiene el tamaño de la imagen y ajusta la vertical o la horizontal de la imagen
' y devuelve una cadena diciendo si es demasiado alta o demasiado ancha.
' La funcion toma el nombre de la imagen de la variable global Direccion
Function AjustaImagen() As String
Dim Dimension As String
'-- El Alto de la imagen
Dim iH As Integer = 0
'-- El ancho de la imagen
Dim iW As Integer = 0
Dim ti As System.Drawing.Image = System.Drawing.Image.FromFile(Server.MapPath(Direccion))
'-- Obtiene la altura y el ancho y le añade un margen
iH = ti.Height
iW = ti.Width
If iW > iH Then 'Ajusta ancho
Dimension = "WIDTH"
'Ya que estamos aquí, sacamos el tamaño del margen en una variable exterior
AnchoMargen = (480 - iH) / 2
Else 'Ajusta alto
Dimension = "HEIGHT"
End If
Return Dimension
End Function
Ahora, cuando querramos cargar la imagen solo tenemo sque pasarle su direcion a este programuko.
Private Sub CargaImagen(ByVal ImageDir As String)
Imagen.ImageUrl = ImageDir
Select Case AjustaImagen()
Case "WIDTH"
imagen.Attributes.Add("width", "640px")
imagen.Attributes.Remove("height")
Case "HEIGHT"
imagen.Attributes.Add("height", "480px")
imagen.Attributes.Remove("Width")
End Select
End Sub
Esto nos la dejará bien ajustada al tamaño del recuadro, ya sea más grande o mas pequeña que él. Ahora solo falta ajustarla verticalmente.
Pues olvidaos del Div. En vez de eso vamos a cambiarlo por una tabla. La etiqueta <TD> tiene un atributo llamado Valign que controla la alineacion vertical.
<TABLE height="480" width="640">
<TR>
<TD vAlign="middle" align="center">
<asp:image id="Imagen" runat="server"></asp:image></TD>
</TR>
</TABLE>
Anda que no me ha costado esto. Que quede aquí grabado en pixeles de fuego para que nadie más vuelva a darse de cabezazos por culpa de una imagen mal alineada.
Hasta la proxima comedera de coco.