ConsoleWrite('Color difference: ' & _Color_ColorDifference(0x8F1EFF00, 0x6700CC00) & @CRLF)
; #FUNCTION# ===================================================================
; Name ..........: _Color_ColorDifference
; Description ...: Calculate difference between two colors.
; Syntax ........: _Color_ColorDifference($vARGB1, $vARGB2)
; Parameters ....: $vARGB1 - Variant: A Hex, Integer or Binary color value.
; $vARGB2 - Variant: A Hex, Integer or Binary color value.
; Return values .: Success - Int: Color difference.
; Failure - Int: Returns 0 and sets @error:
; |1 First parameter isn't a Hex string.
; |2 Second parameter isn't a Hex string.
; Author ........: dany
; Modified ......:
; Remarks .......: A value of 500 or higher is recommended for good contrast.
; Link ..........: http://www.w3.org/TR/2000/WD-AERT-20000426#color-contrast
; ==============================================================================
Func _Color_ColorDifference($vARGB1, $vARGB2)
If IsInt($vARGB1) Or IsBinary($vARGB1) Then $vARGB1 = Hex($vARGB1)
If IsInt($vARGB2) Or IsBinary($vARGB1) Then $vARGB2 = Hex($vARGB2)
If Not StringIsXDigit($vARGB1) Then Return SetError(1, 0, 0)
If Not StringIsXDigit($vARGB2) Then Return SetError(2, 0, 0)
If 7 > StringLen($vARGB1) Then $vARGB1 = 'FF' & $vARGB1
If 7 > StringLen($vARGB2) Then $vARGB1 = 'FF' & $vARGB2
Local $iRed, $iGreen, $iBlue, $iColor1, $iColor2
$iColor1 = Dec(StringMid($vARGB1, 3, 2))
$iColor2 = Dec(StringMid($vARGB2, 3, 2))
$iRed = __Color_Max($iColor1, $iColor2) - __Color_Min($iColor1, $iColor2)
$iColor1 = Dec(StringMid($vARGB1, 5, 2))
$iColor2 = Dec(StringMid($vARGB2, 5, 2))
$iGreen = __Color_Max($iColor1, $iColor2) - __Color_Min($iColor1, $iColor2)
$iColor1 = Dec(StringMid($vARGB1, 7, 2))
$iColor2 = Dec(StringMid($vARGB2, 7, 2))
$iBlue = __Color_Max($iColor1, $iColor2) - __Color_Min($iColor1, $iColor2)
Return $iRed + $iGreen + $iBlue
EndFunc ;==>_Color_ColorDifference
; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __Color_Min
; Description ...: Return lowest of two values.
; Remarks .......: For Internal Use Only.
; ==============================================================================
Func __Color_Min($iX, $iY)
If Number($iX) > Number($iY) Then Return $iY
Return $iX
EndFunc ;==>__Color_Min
; #INTERNAL_USE_ONLY# ==========================================================
; Name ..........: __Color_Max
; Description ...: Return highest of two values.
; Remarks .......: For Internal Use Only.
; ==============================================================================
Func __Color_Max($iX, $iY)
If Number($iX) < Number($iY) Then Return $iY
Return $iX
EndFunc ;==>__Color_Max