; #include #include #include #include #include ; ;-------------------------------------------------------------------------------------------------------------------------------- _couleur_exemple() ;-------------------------------------------------------------------------------------------------------------------------------- ; Func _couleur_exemple() ; Dim $couleur_RGB[3] Dim $couleur_HSV[3] ;-------------------------------------------------------------------------------------------------------------------------------------- ; $couleur_choisie 143, 223, 255 $intr = 143 $intg = 223 $intb = 255 $couleur_RGB[0] = $intr $couleur_RGB[1] = $intg $couleur_RGB[2] = $intb $couleur_choisie = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) ; $couleur_opposee 255, 175, 143 $couleur_RGB = _couleur_opposee($couleur_RGB) $couleur_opposee = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) ;-------------------------------------------------------------------------------------------------------------------------------------- ; $couleur_saturee 15, 187, 255 $couleur_RGB[0] = $intr $couleur_RGB[1] = $intg $couleur_RGB[2] = $intb $couleur_RGB = _couleur_saturee($couleur_RGB) $couleur_saturee = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) ; $couleur_saturee_opposee 255, 83, 15 $couleur_RGB = _couleur_opposee($couleur_RGB) $couleur_saturee_opposee = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) ;-------------------------------------------------------------------------------------------------------------------------------------- ; $couleur_luminosite 71, 112, 128 $couleur_RGB[0] = $intr $couleur_RGB[1] = $intg $couleur_RGB[2] = $intb $couleur_RGB = _couleur_luminosite($couleur_RGB) $couleur_luminosite = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) ; $couleur_luminosite_opposee 128, 87, 71 $couleur_RGB = _couleur_opposee($couleur_RGB) $couleur_luminosite_opposee = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) ;-------------------------------------------------------------------------------------------------------------------------------------- $GUI = GUICreate("la boîte à couleurs", 400, 500) Global $iMemo = GUICtrlCreateEdit("", 2, 220, 396, 250, BitOR($WS_VSCROLL, $WS_HSCROLL)) GUISetFont(9, 400, 0, "Courier New") ;---------------------------------------------------------------------------------------------------------------------------------------------------------- $Bouton_couleur_choisie = GUICtrlCreateButton("choisir", 20, 10, 170, 30) GUICtrlSetBkColor($Bouton_couleur_choisie,$couleur_choisie) GUICtrlCreateLabel("votre couleur", 20, 42, 170, 14) $libelle_couleur_choisie = GUICtrlCreateLabel("", 20, 56, 170, 14) ; $Bouton_couleur_opposee = GUICtrlCreateLabel("", 210, 10, 170, 30) GUICtrlSetBkColor($Bouton_couleur_opposee,$couleur_opposee) GUICtrlCreateLabel("couleur opposée", 210, 42, 170, 14) $libelle_couleur_opposee = GUICtrlCreateLabel("", 210, 56, 170, 14) ;---------------------------------------------------------------------------------------------------------------------------------------------------------- $Bouton_couleur_saturee = GUICtrlCreateLabel("", 20, 80, 170, 30) GUICtrlSetBkColor($Bouton_couleur_saturee,$couleur_saturee) GUICtrlCreateLabel("saturée", 20, 112, 170, 14) $libelle_couleur_saturee = GUICtrlCreateLabel("", 20, 126, 170, 14) ; $Button_couleur_saturee_opposee = GUICtrlCreateLabel("", 210, 80, 170, 30) GUICtrlSetBkColor($Button_couleur_saturee_opposee,$couleur_saturee_opposee) GUICtrlCreateLabel("saturée inversée", 210, 112, 170, 14) $libelle_couleur_saturee_opposee = GUICtrlCreateLabel("", 210, 126, 170, 14) ;---------------------------------------------------------------------------------------------------------------------------------------------------------- $Button_couleur_luminosite = GUICtrlCreateLabel("", 20, 150, 170, 30) GUICtrlSetBkColor($Button_couleur_luminosite,$couleur_luminosite) GUICtrlCreateLabel("luminosité inversée", 20, 182, 170, 14) $libelle_couleur_luminosite = GUICtrlCreateLabel("", 20, 196, 170, 14) ; $Button_couleur_luminosite_opposee = GUICtrlCreateLabel("", 210, 150, 170, 30) GUICtrlSetBkColor($Button_couleur_luminosite_opposee,$couleur_luminosite_opposee) GUICtrlCreateLabel("luminosité inversée", 210, 182, 170, 14) $libelle_couleur_luminosite_opposee = GUICtrlCreateLabel("", 210, 196, 170, 14) ;---------------------------------------------------------------------------------------------------------------------------------------------------------- GUISetState() ; While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $Bouton_couleur_choisie ; ;-------------------------------------------------------------------------------------------------------------------------------------- ; $couleur_choisie par default : 143, 223, 255 $couleur_choisie = _ChooseColorRGB(0x8fdfff, $GUI) $intr = Int('0x' & StringMid($couleur_choisie, 3, 2)) $intg = Int('0x' & StringMid($couleur_choisie, 5, 2)) $intb = Int('0x' & StringMid($couleur_choisie, 7, 2)) $couleur_RGB[0] = $intr $couleur_RGB[1] = $intg $couleur_RGB[2] = $intb $couleur_choisie = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) GUICtrlSetData($iMemo, @CRLF , 1) a_memo("choisie", $couleur_RGB) ; $couleur_opposee 255, 175, 143 $couleur_RGB = _couleur_opposee($couleur_RGB) $couleur_opposee = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) a_memo("opposée", $couleur_RGB) ;---------------------------------------------------------------------------------------------------------------------- ; $couleur_saturee 15, 187, 255 $couleur_RGB[0] = $intr $couleur_RGB[1] = $intg $couleur_RGB[2] = $intb $couleur_RGB = _couleur_saturee($couleur_RGB) $couleur_saturee = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) a_memo("saturée", $couleur_RGB) ; $couleur_saturee_opposee 255, 83, 15 $couleur_RGB = _couleur_opposee($couleur_RGB) $couleur_saturee_opposee = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) a_memo("saturée opposée", $couleur_RGB) ;---------------------------------------------------------------------------------------------------------------------- ; $couleur_luminosite 71, 112, 128 $couleur_RGB[0] = $intr $couleur_RGB[1] = $intg $couleur_RGB[2] = $intb $couleur_RGB = _couleur_luminosite($couleur_RGB) $couleur_luminosite = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) a_memo("luminosite", $couleur_RGB) ; $couleur_luminosite_opposee 128, 87, 71 $couleur_RGB = _couleur_opposee($couleur_RGB) $couleur_luminosite_opposee = "0x"&Hex(Round($couleur_RGB[0]),2)&Hex(Round($couleur_RGB[1]),2)&Hex(Round($couleur_RGB[2]),2) a_memo("luminosite opposée", $couleur_RGB) ;-------------------------------------------------------------------------------------------------------------------------------------- GUICtrlSetBkColor($Bouton_couleur_choisie,$couleur_choisie) GUICtrlSetData($libelle_couleur_choisie, Hex($couleur_choisie,6)) ; GUICtrlSetBkColor($Bouton_couleur_opposee,$couleur_opposee) GUICtrlSetData($libelle_couleur_opposee, Hex($couleur_opposee,6)) ;---------------------------------------------------------------------------------------------------------------------- GUICtrlSetBkColor($Bouton_couleur_saturee,$couleur_saturee) GUICtrlSetData($libelle_couleur_saturee, Hex($couleur_saturee,6)) ; GUICtrlSetBkColor($Button_couleur_saturee_opposee,$couleur_saturee_opposee) GUICtrlSetData($libelle_couleur_saturee_opposee, Hex($couleur_saturee_opposee,6)) ;---------------------------------------------------------------------------------------------------------------------- GUICtrlSetBkColor($Button_couleur_luminosite,$couleur_luminosite) GUICtrlSetData($libelle_couleur_luminosite, Hex($couleur_luminosite,6)) ; GUICtrlSetBkColor($Button_couleur_luminosite_opposee,$couleur_luminosite_opposee) GUICtrlSetData($libelle_couleur_luminosite_opposee, Hex($couleur_luminosite_opposee,6)) ;-------------------------------------------------------------------------------------------------------------------------------------- EndSwitch WEnd ; EndFunc ;-------------------------------------------------------------------------------------------------------------------------------- ; Func _ChooseColorRGB($iColorRef = 0, $hWndOwnder = 0) ; Local $tcc, $tChoose, $color_picked, $iResult ; $tChoose = DllStructCreate($tagCHOOSECOLOR) $tcc = DllStructCreate("int[16]") $iColorRef = Hex(String($iColorRef), 6) $iColorRef = '0x' & StringMid($iColorRef, 5, 2) & StringMid($iColorRef, 3, 2) & StringMid($iColorRef, 1, 2) DllStructSetData($tChoose, "Size", DllStructGetSize($tChoose)) DllStructSetData($tChoose, "hWndOwnder", $hWndOwnder) DllStructSetData($tChoose, "rgbResult", $iColorRef) DllStructSetData($tChoose, "CustColors", DllStructGetPtr($tcc)) DllStructSetData($tChoose, "Flags", BitOR($__MISCCONSTANT_CC_ANYCOLOR, $__MISCCONSTANT_CC_FULLOPEN, $__MISCCONSTANT_CC_RGBINIT)) $iResult = DllCall("comdlg32.dll", "long", "ChooseColor", "ptr", DllStructGetPtr($tChoose)) $color_picked = Hex(String(DllStructGetData($tChoose, "rgbResult")), 6) Return '0x' & StringMid($color_picked, 5, 2) & StringMid($color_picked, 3, 2) & StringMid($color_picked, 1, 2) ; EndFunc ;-------------------------------------------------------------------------------------------------------------------------------- ; ; #FUNCTION# ====================================================================================== ; Name...........: _ColorConvertRGBtoHSV ; Description ...: Converts RGB to HSV ; Syntax.........: _ColorConvertRGBtoHSV($avArray) ; Parameters ....: $avArray - An array containing RGB values [0, 1] in their respective positions ; Return values .: Success - The array containing the HSL values [0, 1] for the inputted RGB values ; Failure - 0, sets @error to 1 ; Author ........: Ultima ; Modified.......: ; Remarks .......: See: EasyRGB - Color mathematics and conversion formulas. ; Related .......: _ColorConvertHSVtoRGB ; Link ..........; ; Example .......; ; ================================================================================================= Func _ColorConvertRGBtoHSV($avArray) If UBound($avArray) <> 3 Or UBound($avArray, 0) <> 1 Then Return SetError(1, 0, 0) Local $nH, $nS, $nL Local $nR = Number($avArray[0]) Local $nG = Number($avArray[1]) Local $nB = Number($avArray[2]) Local $nMax = $nR If $nMax < $nG Then $nMax = $nG If $nMax < $nB Then $nMax = $nB Local $nMin = $nR If $nMin > $nG Then $nMin = $nG If $nMin > $nB Then $nMin = $nB Local $nMinMaxDiff = ($nMax - $nMin) ; Value $nV = $nMax If ($nMinMaxDiff = 0) Then ; Grayscale $nH = 0 $nS = 0 Else ; Saturation $nS = $nMinMaxDiff / $nMax ; Hue Switch $nMax Case $nR $nH = ($nG - $nB) / (6 * $nMinMaxDiff) Case $nG $nH = ($nB - $nR) / (6 * $nMinMaxDiff) + 1 / 3 Case $nB $nH = ($nR - $nG) / (6 * $nMinMaxDiff) + 2 / 3 EndSwitch If $nH < 0 Then $nH += 1 If $nH > 1 Then $nH -= 1 EndIf $avArray[0] = $nH $avArray[1] = $nS $avArray[2] = $nV Return $avArray EndFunc ;-------------------------------------------------------------------------------------------------------------------------------- ; ; #FUNCTION# ====================================================================================== ; Name...........: _ColorConvertHSVtoRGB ; Description ...: Converts HSV to RGB ; Syntax.........: _ColorConvertHSVtoRGB($avArray) ; Parameters ....: $avArray - An array containing HSV values [0, 1] in their respective positions ; Return values .: Success - The array containing the RGB values [0, 1] for the inputted HSV values ; Failure - 0, sets @error to 1 ; Author ........: Ultima ; Modified.......: ; Remarks .......: See: EasyRGB - Color mathematics and conversion formulas. ; Related .......: _ColorConvertRGBtoHSV ; Link ..........; ; Example .......; Yes ; ================================================================================================= Func _ColorConvertHSVtoRGB($avArray) If UBound($avArray) <> 3 Or UBound($avArray, 0) <> 1 Then Return SetError(1, 0, 0) Local $nR, $nG, $nB Local $nH = Number($avArray[0]) Local $nS = Number($avArray[1]) Local $nV = Number($avArray[2]) If $nS = 0 Then ; Grayscale $nR = $nV $nG = $nV $nB = $nV Else ; Chromatic Local $nValA, $nValB, $nValC Local $nValh = $nH * 6 if ($nValh = 6) Then $nValh = 0 ; H must be < 1 Local $nVali = Int($nValh) $nValA = $nV * (1 - $nS) $nValB = $nV * (1 - ($nS * ($nValh - $nVali))) $nValC = $nV * (1 - ($nS * (1 - ($nValh - $nVali)))) Switch ($nVali) Case 0 $nR = $nV $nG = $nValC $nB = $nValA Case 1 $nR = $nValB $nG = $nV $nB = $nValA Case 2 $nR = $nValA $nG = $nV $nB = $nValC Case 3 $nR = $nValA $nG = $nValB $nB = $nV Case 4 $nR = $nValC $nG = $nValA $nB = $nV Case Else $nR = $nV $nG = $nValA $nB = $nValB EndSwitch EndIf $avArray[0] = $nR $avArray[1] = $nG $avArray[2] = $nB Return $avArray EndFunc ;-------------------------------------------------------------------------------------------------------------------------------- ; Func a_memo($titre, $couleur_RGB) ;_ArrayDisplay($couleur_RGB) Local $couleur_hexa = "0x"&Hex($couleur_RGB[0],2)&Hex($couleur_RGB[1],2)&Hex($couleur_RGB[2],2) Local $couleur_HSV[3] $couleur_HSV = _ColorConvertRGBtoHSV($couleur_RGB) $H_HSV = Round($couleur_HSV[0]*360) $S_HSV = Round($couleur_HSV[1]*100) $V_HSV = Round($couleur_HSV[2] *100/255) GUICtrlSetData($iMemo, " "& $titre &" .........." & @CRLF, 1) GUICtrlSetData($iMemo,@TAB & $couleur_hexa &" "&@TAB &"-RGB-"&Round($couleur_RGB[0]) &","&Round($couleur_RGB[1]) &","&Round($couleur_RGB[2])&@TAB &" -HSV-" &$H_HSV &","&$S_HSV &","&$V_HSV & @CRLF, 1) EndFunc ;-------------------------------------------------------------------------------------------------------------------------------- ; Func _couleur_opposee($couleur_RGB) ; ; La couleur opposée est à l'inverse du cercle : ; transformer la ouleur mode RGB en mode TSV ; ajouter ou retirer 180° à T (Hue) (je retire si je vais au delà de 360); ; Local $couleur_HSV[3] Local $inth ; $couleur_HSV = _ColorConvertRGBtoHSV($couleur_RGB) $inth = Round($couleur_HSV[0]*360) ; $couleur_HSV[0] = Mod($inth + 180 ,360)/360 Return _ColorConvertHSVtoRGB($couleur_HSV) EndFunc ;-------------------------------------------------------------------------------------------------------------------------------- ; Func _couleur_saturee($couleur_RGB) ; ; La saturation maximum est 100 ; transformer la ouleur mode RGB en mode TSV ; ajouter 50° à S (Saturation) ; exemple : j'ai 44, le maximum est 100, j'ajoute 50, j'aurai 94 : ; Local $couleur_HSV[3] Local $ints ; $couleur_HSV = _ColorConvertRGBtoHSV($couleur_RGB) $ints = Round($couleur_HSV[1]*100) $couleur_HSV[1] = Mod($ints + 50 ,100)/100 Return _ColorConvertHSVtoRGB($couleur_HSV) EndFunc ;-------------------------------------------------------------------------------------------------------------------------------- ; Func _couleur_luminosite($couleur_RGB) ; ; La luminosite maximum est 100 ; transformer la ouleur mode RGB en mode TSV ; ajouter 50° à V (Value) ; exemple : j'ai 44, j'ai 100, je mets donc à 50 : ; Local $couleur_HSV[3] Local $intv ; $couleur_HSV = _ColorConvertRGBtoHSV($couleur_RGB) $intv = Round($couleur_HSV[2] *100/255) $couleur_HSV[2] = Mod($intv /2 ,100)/100*255 Return _ColorConvertHSVtoRGB($couleur_HSV) EndFunc