Voici les deux codes VBA :
Code:
Sub une()
' on compte le nombre de couleur de l'image
For I = 0 To Max_X
For J = 0 To Max_Y
c = GetPixel(DeskHdc, J, I)
r = Int(c Mod 256)
g = Int((c Mod 65536) / 256)
b = Int(c / 65536)
If tabcoul(r, g, b) = False Then
tabcoul(r, g, b) = True
nbcoul = nbcoul + 1
End If
DoEvents
Next J
Next
End Sub
Sub deux()
' on compte le nombre de couleur de l'image
For I = 0 To Max_X
For J = 0 To Max_Y
MonDico(GetPixel(DeskHdc, J, I)) = ""
DoEvents
Next J
Next
End Sub
Les deux mon sortis le même nombre de couleur unique 49792 pour une image de 560 x 200 pixels et les deux codes ont mis environs 40 secondes.
Conclusion 1 : l'objet dictionary est aussi rapide que tester si une valeur existe dans un tableau à trois entrées.
Conclusion 2 : ce doit être l'instruction GetPixel qui ralenti les procédures, en effet celle-ci interroge les pixels écran et l'accès à cette donnée doit être chronophage ! Il me faudrait mettre l'image en mémoire et travailler le code dans la mémoire plutôt que sur l'écran...
je cherche encore, mais quand je vois que le clic sur propriété de photofilte, les données s'affichent instantanément, je me dis que j'ai de la marge de progression !
@ bientôt
LouReeD