Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ListView y Thumbnails

9 views
Skip to first unread message

Federico

unread,
May 8, 2008, 4:26:05 PM5/8/08
to
Hola amigos,

Hace mucho tiempo que no participo en el foro, he estado desarrollando
mucho.

Tengo una aplicación que utiliza un listview para mostrar miniaturas
de imágenes, todo está bien, pero... las imágenes se distorcionan ya
que el ImageList asociado al Listview utiliza un sólo tamaño de imagen
mediante la propiedad ImageSize que se asigna el mismo tamaño para
todas las imñagenes del ImageList.

Quisiera si alguien sabe cómo hacer para mantener el aspecto de la
imagen como cuando en el explorador de windows se selecciona ver
vistas en miniatura; se muestra un recuadro de igual tamaño para todas
las imágenes y dentro del cuadro se ve la imagen en miniatura con su
aspecto real.

Gracias

Federico Luna.

Ivan

unread,
May 14, 2008, 10:12:53 PM5/14/08
to
hola Federico, mas vale tarde que nunca

>>> utiliza un listview para mostrar miniaturas
> de imágenes, todo está bien, pero... las imágenes se distorcionan ya
> que el ImageList asociado al Listview utiliza un sólo tamaño de imagen
> mediante la propiedad ImageSize que se asigna el mismo tamaño para
> todas las imñagenes del ImageList. <<<

aunque quizas ya lo hayas resuelto, o hallas desistido, te comento una
posibilidad que se me ha ocurrido

de todas formas seguro que hay algo mas 'propio' y/o sencillo, pero
parece funcionar bien, aunque quizas algo lento si las imagenes son
muy grandes y muchas. Pej, con 320 imagenes (aprox) de considerable
tamaño, y mostrandolas con un tamaño de 125 en su lado mas grande, a
mi me ha tardado (con mi tartana) un minuto y medio, aprox. Pero con
pocas tarda bastante poco

bueno te pongo los codigos, y si quieres ver alguna explicacion
adicional echale un ojo a este hilo =>

http://tinyurl.com/64y8un

bueno, esta seria una funcion que devuelve una imagen cuadrada con la
foto original en su interior con las proporciones reales y con el
resto en blanco

Public Function CuadreImagen(ByVal RutaImagen As String) As Image
On Error Resume Next
Dim im As Bitmap = New Bitmap(RutaImagen)
If Err.Number <> 0 Then Return Nothing
On Error GoTo 0
Dim imagen As New Bitmap(im)
im.Dispose()
Dim lado, iX, iY As Integer
With imagen
lado = IIf(.Width > .Height, .Width, .Height)
iX = (lado - .Width) / 2
iY = (lado - .Height) / 2
End With
Dim imgLienzo As New Bitmap(lado, lado)
Dim marco As Graphics = Graphics.FromImage(imgLienzo)
marco.Clear(Color.White)
marco.DrawImage(imagen, iX, iY)
marco.Dispose() : marco = Nothing
imagen.Dispose() : imagen = Nothing
Return imgLienzo
End Function

y este el ej. con que lo he ido probando

para este ej. cargo previamente un combobox (cmbImagenes) con las el
nombre de archivo (foto1.jpg, fotoX.jpg) de todas las imagenes de un
directorio y el Tag de dicho combo con la ruta a dicho directorio.

despues desde un boton carga el ImageList1 y el ListView1

Private Sub btCargarLV_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btCargarLV.Click
With cmbImagenes
If .Items.Count > 0 Then
ImageList1.ImageSize = New Size(125, 125)
ListView1.LargeImageList = ImageList1
ListView1.View = View.LargeIcon
ListView1.BeginUpdate()
Dim n As Integer
For n = 0 To .Items.Count - 1
ImageList1.Images.Add(.Items(n), _
CuadreImagen(.Tag & "\" & .Items(n)))
ListView1.Items.Add(.Items(n), .Items(n))
' si son muchas imagenes quizas no venga mal
'My.Application.DoEvents()
Next
ListView1.EndUpdate()
End If
End With
End Sub

es solo para pruebas y no tiene manejo de errores

espero te ayude

Un saludo
Ivan

PD: seguro que el tiempo se puede optimizar (y el resto tambien, je,
je, ..) y si alguien ve cualquier cosa, bienvenido sea

Federico

unread,
May 17, 2008, 1:17:07 PM5/17/08
to

Muchas gracias y en efecto, ya lo había conseguido de forma similar a
la que propones, de todas maneras voy a probar tu código.

Federico

0 new messages