Lecture EXIF : c'est long.
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:
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 |