Mit der Funktion _GetColorWithBrightness erhaltet ihr zu einer RGB-Farbe den um n-Helligkeitschritte (+/-) oder auf eine fixe Helligkeit geänderten Farbwert.
Bei den reinen Farben (R, G, B) sind recht große Schritte erforderlich (ca. 10), bei Mischfarben reichen meist Schrittweiten von 2-3. Könnt ihr im Bsp.-Skript testen.
AutoIt: ColorBrightness.au3
;-- TIME_STAMP 2022-09-30 12:10:37
_TestBrightness(0xF5F5DC, 2)
_TestBrightness(0x0000FF, 10)
_TestBrightness(0xE9967A, 4)
Func _TestBrightness($_RGB, $_step)
Local $hGui = GUICreate('Test Brightness', 400, 200)
Local $RGB2 = $_RGB, $aL1[6], $aL2[6], $y
GUICtrlCreateLabel('AUFHELLEN', 10, 10)
GUICtrlCreateLabel('ABDUNKELN', 200, 10)
For $i = 0 To UBound($aL1) -1
$y = 30 + $i*21
$aL1[$i] = GUICtrlCreateLabel('', 10, $y, 180, 20)
$aL2[$i] = GUICtrlCreateLabel('', 200, $y, 180, 20)
Next
GUICtrlSetBkColor($aL1[0], $_RGB)
GUICtrlSetBkColor($aL2[0], $RGB2)
For $i = 1 To UBound($aL1) -1
$_RGB = _GetColorWithBrightness($_RGB, $_step)
GUICtrlSetBkColor($aL1[$i], $_RGB)
$RGB2 = _GetColorWithBrightness($RGB2, (-1)*$_step)
GUICtrlSetBkColor($aL2[$i], $RGB2)
Next
GUISetState()
Do
Until GUIGetMsg() = -3
GUIDelete($hGui)
EndFunc
; #FUNCTION# =======================================================================================
; Name ..........: _GetColorWithBrightness
; Description ...: Gibt zu einer Farbe die auf einen Helligkeitswert geänderte Farbe zurück
; Parameter(s)...: $_RGB
; ....[optional].: $_iStep Zur Änderung der Helligkeit um einzelne Schritte (+/-), (Default: 0)
; ...............: Nur wirksam, wenn "$_iBrightness=Null".
; ....[optional].: $_iBrightness Zur Änderung der Helligkeit auf einen fixen Wert (Default: Null)
; Return values .: Success Der neue Farbwert
; ...............: Failure Der Farbwert, wie übergeben ($_iStep/$_iBrightness nicht angegeben)
; Author ........: BugFix
; ==================================================================================================
Func _GetColorWithBrightness($_RGB, $_iStep=0, $_iBrightness=Null)
Local $R = BitAND(BitShift($_RGB, 16), 0xFF)
Local $G = BitAND(BitShift($_RGB, 8), 0xFF)
Local $B = BitAND($_RGB, 0xFF)
Local $R1 = $R, $G1 = $G, $B1 = $B
Local $Brightness = Int(Sqrt($R^2*0.299 + $G^2*0.587 + $B^2*0.114))
If $_iBrightness = Null Then ; Schrittweite wird verwendet
$_iBrightness = $Brightness + ($_iStep)
EndIf
$_iBrightness = $_iBrightness < 0 ? 0 : ($_iBrightness > 255 ? 255 : $_iBrightness)
If $_iBrightness > $Brightness Then
While $Brightness < $_iBrightness
$R1 = $R1 +1 > 255 ? 255 : $R1 +1
$G1 = $G1 +1 > 255 ? 255 : $G1 +1
$B1 = $B1 +1 > 255 ? 255 : $B1 +1
$Brightness = Int(Sqrt($R1^2*0.299 + $G1^2*0.587 + $B1^2*0.114))
WEnd
ElseIf $_iBrightness < $Brightness Then
While $Brightness > $_iBrightness
$R1 = $R1 -1 < 0 ? 0 : $R1 -1
$G1 = $G1 -1 < 0 ? 0 : $G1 -1
$B1 = $B1 -1 < 0 ? 0 : $B1 -1
$Brightness = Int(Sqrt($R1^2*0.299 + $G1^2*0.587 + $B1^2*0.114))
WEnd
EndIf
Return '0x' & Hex($R1,2) & Hex($G1,2) & Hex($B1,2)
EndFunc
Alles anzeigen