Что нового

Проверка оттенка цвета - является ли указанный цвет тёмным

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 175
Репутация
2 331
Данная функция с примером демонстрирует возможность проверки является ли указанный цвет тёмным. Это полезно когда нужно определить какой цвет текста использовать на определённом фоне. Например на тёмном фоне тёмный текст не будет виден, эта функция позволит узнать какой цвет лучше использовать, светлый (белый обычно) или тёмный (чёрный).

Код:
#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


В этом примере просто укажите любой цвет для фона, и тексту будет назначен противоположный цвет (по оттенку).
 
Верх