Bonjour,
Je dois télécharger plusieurs centaines d'images, les convertir en .png puis les sauver en local.
J'ai d'abord tenté ceci (mes connaissances sont ce qu'elles sont, merci pour votre compréhension ;-)):
...pour me rendre compte que 200 images sont bel et bien créées..mais vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 For i As Integer = 1 To 200 Dim img As String = "https://lalydo.files.wordpress.com/2010/10/for-the-birds.jpg" Dim name As String = "newname" & i Dim bitmap As New BitmapImage() bitmap.BeginInit() bitmap.UriSource = New Uri(img) bitmap.EndInit() Dim encoder As PngBitmapEncoder = New PngBitmapEncoder() encoder.Frames.Add(BitmapFrame.Create(bitmap)) Using filestream = New FileStream(destinationFolder & "\" & name & ".png", FileMode.Create) encoder.Save(filestream) End Using Next
J'imagine que c'est parce que l'image n'a pas fini de se télécharger que l'on passe déjà à l'image suivante!!?
J'essaie alors de déporter le traitement dans un sub qui se lance une fois que l'image a fini d'être téléchargée
Est-ce la bonne facon de faire, svp?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Imports System.IO Class MainWindow Dim destinationFolder As String = "C:\Test" Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click If Not Directory.Exists(destinationFolder) Then Directory.CreateDirectory(destinationFolder) CollectBitmap() End Sub Sub CollectBitmap() For i As Integer = 1 To 200 Dim img As String = "https://lalydo.files.wordpress.com/2010/10/for-the-birds.jpg" Dim name As String = "newname" & i Dim bitmap As New BitmapImage() bitmap.BeginInit() bitmap.UriSource = New Uri(img) bitmap.EndInit() ' SaveImage(bitmap, name) Next End Sub Sub SaveImage(ByVal bitmap As BitmapImage, ByVal name As String) AddHandler bitmap.DownloadCompleted, New EventHandler(Sub(sender As Object, args As EventArgs) Dim encoder As PngBitmapEncoder = New PngBitmapEncoder() encoder.Frames.Add(BitmapFrame.Create(DirectCast(sender, BitmapImage))) Using filestream = New FileStream(destinationFolder & "\" & name & ".png", FileMode.Create) encoder.Save(filestream) End Using Label1.Content = name & " converted and saved" End Sub) End Sub End Class
Si je comprends bien, il y a donc plusieurs (dizaines sans doute) d'images dont le traitement est lancé concurremment!?
Ne serais-ce pas mieux de télécharger la première, de faire le traitement, de sauver, puis de passer à la suivante?
Et surtout: comment pourrais je faire pour voir l'évolution du téléchargement avec une progressbar (et déjà s'assurer que Label1.Content est mis à jour, ce qui n'est pas le cas jusqu'à présent)
Merci pour tout aide
Partager