- '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
-
'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