У меня нет конкретного примера кода под рукой для чего-то подобного, но вот идея, как это сделать с помощью математики.Установите 0 - 9 на их значение, а A - F на 10 - 15, как показано ниже (вам также понадобится умножить эти значения на 16, это будет иметь смысл в секунду):
0 : 0 : 0
1 : 1 : 16
2 : 2 : 32
...
A : 10 : 160
B : 11 : 176
C : 12 : 192
...
F : 15 : 240
Как только вы получитеВ этой настройке вы можете (при условии, что ваш цвет в HEX) разделить 3 группы и преобразовать каждую в их шестнадцатеричный эквивалент.Первый символ этих двух умножается на 16, а второй умножается на 1:
FF = (16 * 15) + (15 * 1) = 255
AE = (16 * 10) + (14 * 1) = 174
0F = (16 * 0 ) + (15 * 1) = 15
Получив шестнадцатеричные числа для цвета, который выбирает пользователь, вы можете умножить каждое шестнадцатеричное число на основе формулы.
Ниже приведен пример, я использую более светлый красный и хочу найти более темный красный.Мой начальный HEX - DB4658, и я собираюсь умножить свои значения на .5, чтобы получить мой более темный красный цвет:
- Разделить на 3 группы: DB 46 58
Рассчитатьшестнадцатеричное значение каждого:
D = 13 B = 11 4 = 4 6 = 6 5 = 5 8 = 8
DB = 219 = 13 * 16 + 11 * 1
46 = 70 = 4 * 16 + 6 * 1
58 = 88 = 5 * 16 + 8 * 1
Теперь вычисляем их в более темный шестнадцатеричный код (я вычеркнул число):
219 * .5 = 109
70 * .5 = 35
88 * .5 = 44
Преобразуйте это обратно в наши 3 группировки, для первого взгляда на таблицу, которую вы построили в столбце умножения на 16:
109 = 96 + 13 = 6D
35 = 32 + 3 = 23
44 = 32 + 12 = 2C
Теперь у вас есть более темный красный цвет.
Вы можете отрегулировать от 0,5 до 0,75, если хотите, чтобы контраст был ближе друг к другу, а если выбранный цвет уже темный, то регулировка должна быть в 1,25x или 1,5x.
Надеюсь, вы найдете это полезным.Если вам нужны разъяснения, дайте мне знать.