Soyez le premier à donner votre avis sur cette source.
Vue 12 296 fois - Téléchargée 531 fois
'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
12 mars 2012 à 11:04
Je viens de l'utiliser pour afficher les doublons d'images (sur la base des couleurs).
Ca fonctionne impec! Sur un panel de 8000 images, juste quelques unes ont les mêmes indices de couleurs.. Donc c'est top! Merci encore pour ce partage..
26 mai 2008 à 22:18
> lukebalthazar : Aujourd'hui, j'ai eu enfin le courage et l'envie de chercher comment faire avec le HSB ou HSL (diff?rent de HSV Redman31100 :) voir http://en.wikipedia.org/wiki/HSL_color_space)
et bien je ne vois pas comment faire pour trouver la couleur d' "ambiance" : si je fais la moyenne avec les valeurs HSB et que l'image a, par exemple du jaune/rouge et du bleu, on obtient du vert... et dans le cas d'une image avec des tons se ressemblant, les couleurs moyennes retourn'es pas HSB et par ma m?thode (RGB) sont quasi-identique ! (je vois donc pas trop l'int?r?t, m?me si sur le principe, {128,128,128} ?a fait du gris...)
Si tu pouvais me dire comment tu fait, puisque ta m?thode marche si bien et que la mienne est une erreur ;-) ...
Merci
6 mars 2008 à 19:21
par contre le problème se situe dans ma fonction différenciant les couleurs...
Enfin bon, je vais regarder ce que tu propose.
6 mars 2008 à 13:52
6 mars 2008 à 13:12
http://www.freevbcode.com/ShowCode.asp?ID=7801
je suis pas developpeur en meme temps mais je travaille sur une appli où je dois definir la couleur dominante (donc ca revient a peut près au meme). faire la moyenne des composante RGB est une erreur (que j'ai commise).
cherche sur le site ya plein de code la dessus.
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.