Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System.ComponentModel
- Imports System.IO
- Imports System.Windows.Forms
- Public Class Form1
- Private ImageFolderPath As String = "Chemin_vers_le_dossier_des_images"
- Private ImageList As New ImageList()
- Private Thumbnails As New List(Of ImageInfo)()
- Private Loading As Boolean = False
- Private WithEvents backgroundWorker As New BackgroundWorker()
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- ListView1.View = View.LargeIcon
- ListView1.LargeImageList = ImageList
- ' Gérez le défilement pour charger les images à la demande.
- AddHandler ListView1.Scroll, AddressOf ListView1_Scroll
- ' Configurez le BackgroundWorker.
- backgroundWorker.WorkerReportsProgress = True
- backgroundWorker.WorkerSupportsCancellation = True
- ' Chargez les images initiales (par exemple, les 50 premières images).
- LoadInitialImages(50)
- End Sub
- Private Sub ListView1_Scroll(sender As Object, e As ScrollEventArgs)
- ' Chargez plus d'images lorsque l'utilisateur fait défiler.
- If Not Loading AndAlso e.NewValue + ListView1.ClientSize.Height >= ListView1.Items.Count * ListView1.Items(0).Bounds.Height Then
- LoadMoreImages(50)
- End If
- End Sub
- Private Sub LoadInitialImages(count As Integer)
- For i As Integer = 0 To count - 1
- Dim imagePath As String = Path.Combine(ImageFolderPath, $"image_{i}.jpg")
- If File.Exists(imagePath) Then
- Dim thumbnail As Image = GetThumbnail(imagePath)
- If thumbnail IsNot Nothing Then
- ImageList.Images.Add(thumbnail)
- Thumbnails.Add(New ImageInfo() With {.FilePath = imagePath, .Thumbnail = thumbnail})
- End If
- End If
- Next
- ' Ajoutez les images à la ListView.
- For Each imageInfo As ImageInfo In Thumbnails
- Dim item As New ListViewItem()
- item.ImageIndex = ImageList.Images.Count - 1
- ListView1.Items.Add(item)
- Next
- End Sub
- Private Sub LoadMoreImages(count As Integer)
- ' Utilisez le BackgroundWorker pour charger les images en arrière-plan.
- If Not backgroundWorker.IsBusy Then
- Loading = True
- backgroundWorker.RunWorkerAsync(count)
- End If
- End Sub
- Private Sub backgroundWorker_DoWork(sender As Object, e As DoWorkEventArgs) Handles backgroundWorker.DoWork
- Dim count As Integer = CInt(e.Argument)
- Dim startIndex As Integer = Thumbnails.Count
- For i As Integer = startIndex To startIndex + count - 1
- If backgroundWorker.CancellationPending Then
- e.Cancel = True
- Exit For
- End If
- Dim imagePath As String = Path.Combine(ImageFolderPath, $"image_{i}.jpg")
- If File.Exists(imagePath) Then
- Dim thumbnail As Image = GetThumbnail(imagePath)
- If thumbnail IsNot Nothing Then
- Thumbnails.Add(New ImageInfo() With {.FilePath = imagePath, .Thumbnail = thumbnail})
- backgroundWorker.ReportProgress(i)
- End If
- End If
- Next
- End Sub
- Private Sub backgroundWorker_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles backgroundWorker.ProgressChanged
- ' Ajoutez les images chargées à la ListView.
- Dim index As Integer = e.ProgressPercentage
- Dim imageInfo As ImageInfo = Thumbnails(index)
- ImageList.Images.Add(imageInfo.Thumbnail)
- Dim item As New ListViewItem()
- item.ImageIndex = ImageList.Images.Count - 1
- ListView1.Items.Add(item)
- End Sub
- Private Sub backgroundWorker_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles backgroundWorker.RunWorkerCompleted
- Loading = False
- End Sub
- Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
- ' Annulez le BackgroundWorker s'il est en cours d'exécution.
- If backgroundWorker.IsBusy Then
- backgroundWorker.CancelAsync()
- End If
- End Sub
- Private Function GetThumbnail(imagePath As String) As Image
- ' Code pour créer et retourner une miniature de l'image.
- ' Par exemple, vous pouvez utiliser la classe Bitmap pour redimensionner l'image.
- ' Assurez-vous de gérer les erreurs et de libérer les ressources correctement.
- Try
- Dim originalImage As New Bitmap(imagePath)
- Dim thumbnail As New Bitmap(100, 100) ' Redimensionnez la miniature selon vos besoins.
- Using g As Graphics = Graphics.FromImage(thumbnail)
- g.DrawImage(originalImage, 0, 0, thumbnail.Width, thumbnail.Height)
- End Using
- originalImage.Dispose()
- Return thumbnail
- Catch ex As Exception
- Return Nothing
- End Try
- End Function
- End Class
- Public Class ImageInfo
- Public Property FilePath As String
- Public Property Thumbnail As Image
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement