Автор Тема: Проверка оттенка цвета - является ли указанный цвет тёмным  (Прочитано 3175 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7830
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Данная функция с примером демонстрирует возможность проверки является ли указанный цвет тёмным. Это полезно когда нужно определить какой цвет текста использовать на определённом фоне. Например на тёмном фоне тёмный текст не будет виден, эта функция позволит узнать какой цвет лучше использовать, светлый (белый обычно) или тёмный (чёрный).

Код: AutoIt [Выделить]
#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


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


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
20 Ответов
19850 Просмотров
Последний ответ Октябрь 13, 2015, 21:54:07
от Yashied
1 Ответов
2934 Просмотров
Последний ответ Декабрь 05, 2009, 23:43:42
от mini
0 Ответов
2899 Просмотров
Последний ответ Декабрь 14, 2009, 01:20:20
от dreo
8 Ответов
3947 Просмотров
Последний ответ Февраль 26, 2011, 15:44:45
от Yashied
0 Ответов
2930 Просмотров
Последний ответ Август 26, 2011, 10:24:39
от Генералиссимус
6 Ответов
3709 Просмотров
Последний ответ Июнь 03, 2012, 15:27:42
от running-frag
19 Ответов
7554 Просмотров
Последний ответ Сентябрь 13, 2012, 15:15:36
от Kaster
6 Ответов
2463 Просмотров
Последний ответ Февраль 12, 2014, 09:06:47
от madmasles
0 Ответов
486 Просмотров
Последний ответ Январь 18, 2016, 10:35:04
от Yashied
14 Ответов
4468 Просмотров
Последний ответ Март 31, 2016, 10:56:09
от Alofa