Bonjour,
Je poste ma première source : elle permet de classer des images en fonction de leur couleur dominante, ou plus simplement d'obtenir la couleur moyenne d'une image grâce à une fonction.
J'ai fait des efforts pour commenter, j'espère que ce sera suffisant.
N'hésitez pas à me donner votre avis/conseil...
Source / Exemple :
'Fonction retournant la couleur moyenne d'une image :
''' <summary>retourne la couleur d'ambiance d' une image</summary>
''' <param name="bitmp">l'image a utiliser</param>
''' <param name="precision1">le nombre de boucles en hauteur et largeur</param>
''' <param name="precision2">le nombre de pixels vérifiés sur chaques passage d'une boucle</param>
'''<remarks>en cas d'erreur, la fonction retourne une couleur rouge</remarks>
Public Function checkColor(ByVal bitmp As Bitmap, Optional ByVal precision1 As Integer = 5, Optional ByVal precision2 As Integer = 4) As Color
Try
'Pour eviter erreur "objet utilisé... " en cas d'appel de la fonction dans un thread séparé
Dim imgsize As Drawing.Size = bitmp.Size
Dim coul As New Color
'composantes moyennes finales de l'image
Dim rougeTotal As Int32 = 0
Dim vertTotal As Int32 = 0
Dim bleuTotal As Int32 = 0
Dim bouclex As Int64 = 0 'emplacement x de la zone a checker
'Parcours l'image sur une "grille" et fait une moyenne des composantes RGB sur de petites zones
'Boucle horizontale
' x-1
For boucle1 As Integer = 0 To precision1 - 1
bouclex += (imgsize.Width / precision1) - 5 'x | -5: decal pixel
Dim boucley As Int64 = 0 'emplacement y de la zone a checker
'Boucle verticale
' y-1
For boucle2 As Integer = 0 To precision1 - 1
boucley += (imgsize.Height / precision1) - 5 'y | -5: decal pixel
'composantes moyennes sur une boucle verticale
Dim rouge As Int32 = 0
Dim vert As Int32 = 0
Dim bleu As Int32 = 0
'check une petite zone de pixels
'--------------------------------------------
'3 fois x
For i = bouclex To bouclex + precision2 - 1 '+precision independant de x et y : nbre de pixels contigu a checker
For j As Integer = boucley To boucley + precision2 - 1 '+precision independant de x et y : nbre de pixels contigu a checker
'ajoute les differentes composantes des pixels
rouge += bitmp.GetPixel(i, j).R
vert += bitmp.GetPixel(i, j).G
bleu += bitmp.GetPixel(i, j).B
Next
Next
'moyenne des composantes sur la zone
rouge = rouge / (precision2 * precision2)
vert = vert / (precision2 * precision2)
bleu = bleu / (precision2 * precision2)
'Ajout de la moyenne de zone à la moyenne finale
rougeTotal += rouge
vertTotal += vert
bleuTotal += bleu
'--------------------------------------------
Next
Next
'moyenne des couleurs de l'image en fonctions du nombre de boucles...
rougeTotal = rougeTotal / (precision1 * precision1) ' x*y
vertTotal = vertTotal / (precision1 * precision1) ' x*y
bleuTotal = bleuTotal / (precision1 * precision1) ' x*y
'coul : couleur finale, moyenne de l'image
coul = Color.FromArgb(rougeTotal, vertTotal, bleuTotal)
Return coul
Catch ex As Exception
'erreur, couleur rouge vif
Return Color.Red
MsgBox(ex.Message)
End Try
End Function
'----------------------------------------------------------------
'pour le projet entier(classement des images, etc...), voir Zip
Conclusion :
Je n'ai pas trouvé plus original pour classer mes fonds d'écrans^^
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.