Bonjour,

avec l'aide de divers forums mais aussi des précieuses informations glanées auprès de vous, je parviens à récupérer les données EXIF de fichiers .JPG, et notamment la date/heure de prise de vue.
Oui, mais cela me semble long. 16 secondes pour 50 images... c'est pas top comme performance. J'aperçois d'ailleurs la barre de défilement vertical de ma listview qui apparaît progressivement. Je precise que quand il s'agit de 50 fichiers non .JPG, la durée est quasi instantanée.

Pourriez vous me dire si qque chose cloche dans mon code ? Merci. Jeremy

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        ListV1_initialize()
 
        Dim folderbrowser As New FolderBrowserDialog
 
        If folderbrowser.ShowDialog = Windows.Forms.DialogResult.OK Then
 
 
            folder = New System.IO.DirectoryInfo(folderbrowser.SelectedPath)
            Dim folderFi As IO.FileInfo() = folder.GetFiles("*.*")
            Dim Fi As IO.FileInfo
 
            Dim FiNom As String
            Dim arr(5) As String
            Dim itm As ListViewItem
 
            Dim img As Image
            Dim prop As PropertyItem
            Dim sDate As String
            Dim dateTimeOriginal As DateTime
            Dim tps1 As DateTime
            Dim tps2 As DateTime
 
            For Each Fi In folderFi
 
                FiNom = Fi.FullName
                arr(0) = Fi.Name
                arr(1) = Math.Round((Fi.Length) / 1024, 0)
                arr(1) = Format(Int(arr(1)), "# ### ###") & " Ko"
                arr(2) = Fi.Extension
                arr(3) = (Fi.CreationTime)
 
                'si le fichier est une image, je lis son EXIF, sinon je sors.
                If Fi.Extension = ".JPG" Then
 
 
                    Dim fs As New System.IO.FileStream(FiNom, FileMode.Open)
                    img = Image.FromStream(fs)
                    fs.Close()
 
                    'utilisation de system.drawing.imaging 
                    img = Image.FromFile(FiNom) 'recupere le chemin complet de l'image pour la date_prise_de_vue 
                    prop = img.GetPropertyItem(&H9003)
                    sDate = Encoding.ASCII.GetString(prop.Value, 0, prop.Len).TrimEnd(Chr(0))
                    dateTimeOriginal = DateTime.ParseExact(sDate, "yyyy:MM:dd HH:mm:ss", Nothing)
                    arr(4) = dateTimeOriginal
                    img.Dispose()
 
 
                Else
 
                    arr(4) = "not a pic" 'quand ce n'est pas un fichier JPG, je ne cherche pas l'EXIF.
 
                End If
 
                itm = New ListViewItem(arr)
                ListV1.Items.Add(itm)
                ' msg pour visualiser où ca plante     MsgBox(arr(0))
 
 
            Next
 
        End If
 
    End Sub