J'aimerais pour un projet récupérer des images d'un dossier et les afficher dans un listview. Ensuite, quand l'utilisateur clique sur l'une des images stockées dans le listview, l'image devrait s'afficher dans un picturebox.
voici mon code
Private Sub UltraButton1_Click(sender As Object, e As EventArgs) Handles UltraButton1.Click
Dim nombre As Integer
For Each file As String In System.IO.Directory.GetFiles("C:\Users\titwawa\Pictures")
Dim img As System.Drawing.Image = Image.FromFile(file)
nombre += 1
Dim a As New ListViewItem
a.Text = file
a.ImageIndex = nombre
ListView1.Items.Add(a)
Next
End Sub
Malheureusement sur Dim img As System.Drawing.Image = Image.FromFile(file) , j'ai une erreur qui me dit "Mémoire insuffisante"...
Tu semble être en vb.net ..
Des pistes a suivre ...
Déjà pour les questions d'image oriente toi vers les sources de cs_Le Pivert qui a produit beaucoup d'exemples
Si "Mémoire insuffisante"... c'est que tu intègre surement bcp trop de chose dans ton listview
1, Déjà essaye de créer des filtres comme les extensions ou le format d'image, la date de création (année, mois semaine ..) etc
Tu aura déjà un premier choix qui limitera ensuite la taille de ton listview
Il existe aussi une piste qui serait d'essayer de récupérer ceux produit automatiquement par windows (fichier thumbs.db ) mais les extraire n'est pas simple.
C'est un objet OLE caché dans chaque répertoire
3, Si tu sélectionne une photo dans ton listview regarde du coté de la Propriétée Tag du Listview ..
Cette propriétée peut intégrer tous types d'objets (chemin)
Voici un morceau de code d'une de mes archives
Ce code permet d'extraire d'un arraylist d'Objet qui possède de nombreuses propriétées dont un .Name et une .Image un listview.
Donc ça reste un peu abstrait mais cela vous donnera la voie a suivre
Public Sub InitListview(ByRef L As ListView, ByRef Ar As Arraylist,Optional ByVal Clear As Boolean = True, Optional ByVal Taille As Integer = 128)
L.BeginUpdate()
If Clear Then L.Items.Clear()
Try
Dim imageList As New ImageList()
imageList.ColorDepth = ColorDepth.Depth32Bit
imageList.ImageSize = New Size(Taille, Taille)
Dim Cp As Integer = 0
For Each H In Ar
Dim A As New ListViewItem
A.Text = H.Name
A.Tag = H
A.ImageIndex = Cp
imageList.Images.Add(H.Image.image)
L.Items.Add(A)
Cp = Cp + 1
Next
L.LargeImageList = imageList
L.TileSize = New Size(Taille, Taille)
L.View = View.LargeIcon
Catch ex As Exception
' traitement du probleme
End Try
L.EndUpdate()
End Sub
Vous laisse étudier cette ligne : A.Tag = H
Cela permet de récupérer l'objet sélectionné dans le listview