- Сообщения
- 8,673
- Репутация
- 2,486
Данная функция с примером демонстрирует возможность проверки является ли указанный цвет тёмным. Это полезно когда нужно определить какой цвет текста использовать на определённом фоне. Например на тёмном фоне тёмный текст не будет виден, эта функция позволит узнать какой цвет лучше использовать, светлый (белый обычно) или тёмный (чёрный).
В этом примере просто укажите любой цвет для фона, и тексту будет назначен противоположный цвет (по оттенку).
Код:
#include <GUIConstantsEx.au3>
#include <Misc.au3>
;
Global $Bk_Color = 0xFFFFFF
$GUI = GUICreate("_ColorIsDarkShade Demo", 300, 200)
$Label = GUICtrlCreateLabel("Some Text", 20, 40, 55, 14)
GUICtrlSetBkColor(-1, $Bk_Color)
$ColorSet_Button = GUICtrlCreateButton("Set Color", 20, 80)
GUISetState(@SW_SHOW, $GUI)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $ColorSet_Button
$Bk_Color = _ChooseColor(2, $Bk_Color, 2, $GUI)
GUICtrlSetBkColor($Label, $Bk_Color)
GUICtrlSetColor($Label, _ColorIsDarkShade($Bk_Color, 1))
ConsoleWrite(StringFormat("BkColor (%s) Is Dark Shade: %s\n", $Bk_Color, _ColorIsDarkShade($Bk_Color, 0)))
EndSwitch
WEnd
Func _ColorIsDarkShade($nColor, $iRetMode=0)
Local $i_Red = BitAND(BitShift($nColor, 16), 0xFF)
Local $i_Green = BitAND(BitShift($nColor, 8), 0xFF)
Local $i_Blue = BitAND($nColor, 0xFF)
Local $iMidle_Color_Val = Int(765 / 2) ;765 is the total of 255 + 255 + 255
If $iRetMode <> 0 Then
If ($i_Red + $i_Green + $i_Blue) < $iMidle_Color_Val Then
Return "0xFFFFFF"
Else
Return "0x000000"
EndIf
EndIf
Return ($i_Red + $i_Green + $i_Blue) < $iMidle_Color_Val
EndFunc
Func _ColorInvert($nColor)
Return "0x" & Hex(BitNOT(Number($nColor)), 6)
EndFunc
В этом примере просто укажите любой цвет для фона, и тексту будет назначен противоположный цвет (по оттенку).