Dim tableauCouleurs As New List(Of Color)({Color.FromArgb(0, 63, 154), Color.FromArgb(0, 108, 154), Color.FromArgb(76, 159, 172), Color.FromArgb(0, 63, 0), Color.FromArgb(56, 119, 0), Color.FromArgb(101, 76, 25), Color.FromArgb(207, 35, 0), Color.FromArgb(237, 73, 0), Color.FromArgb(141, 63, 154), Color.FromArgb(227, 63, 154), Color.FromArgb(105, 105, 105), Color.FromArgb(0, 0, 0)}) Private Function SearchColorNearest(ByVal couleurPipette As Color) As Color Dim couleurPlusProche As Color Dim plusPetitEcart As Decimal = 255 * 3 * toleranceH * toleranceS * toleranceV + 1 Dim iCounter As Integer = 0 Dim ecart As Decimal For i = 0 To tableauCouleurs.Count - 1 Dim currentCouleur As Color = tableauCouleurs(i) ecart = getEcart(couleurPipette, currentCouleur) If (ecart < plusPetitEcart) Then plusPetitEcart = ecart couleurPlusProche = currentCouleur iCounter = i ElseIf (ecart = 0) Then plusPetitEcart = ecart couleurPlusProche = currentCouleur iCounter = i Exit For End If Application.DoEvents() Next Return couleurPlusProche End Function Private Function getEcart(ByVal couleurA As Color, ByVal couleurB As Color) As Decimal Dim HA As Decimal = getTeinte(couleurA) Dim SA As Decimal = getSaturation(couleurA) Dim VA As Decimal = getLuminosite(couleurA) Dim HB As Decimal = getTeinte(couleurB) Dim SB As Decimal = getSaturation(couleurB) Dim VB As Decimal = getLuminosite(couleurB) Dim DeltaHBase As Decimal = Math.Abs(HA - HB) * toleranceH Dim MaxH As Decimal = 360 'A Verifier Dim DeltaHModulo As Decimal = Math.Abs((HA + MaxH) - HB) * toleranceH Dim DeltaH As Decimal If (DeltaHBase < DeltaHModulo) Then DeltaH = DeltaHBase Else DeltaH = DeltaHModulo End If Dim DeltaS As Decimal = Math.Abs(SA - SB) * toleranceS Dim DeltaV As Decimal = Math.Abs(VA - VB) * toleranceV Dim ecart As Decimal = DeltaH + DeltaS + DeltaV Return ecart End Function Private Function getTeinte(ByVal isColor As Color) As Decimal Dim h As Decimal = isColor.GetHue() Return h End Function Private Function getSaturation(ByVal isColor As Color) As Decimal Dim s As Decimal = isColor.GetSaturation() Return s End Function Private Function getLuminosite(ByVal isColor As Color) As Decimal Dim v As Decimal = isColor.GetBrightness() Return v End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sColor As Color = Color.FromArgb(0, 63, 154) PctBoxOldColor.BackColor = sColor PctBoxNewColor.BackColor = SearchColorNearest(sColor) End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJe vais travailler dans ce sens.
Je vous tiens au courant.
mais en comparant les longs obtenus, représentatifs, sous VB6, des couleurs.
mais en comparant les longs obtenus, représentatifs, sous VB6, des couleurs