Шестнадцатеричная прозрачность в цветах [дубликат]
этот вопрос уже есть ответ здесь:
Я работаю над реализацией опции прозрачности виджета для моего виджета приложения, хотя у меня возникли некоторые проблемы с получением правильных значений шестнадцатеричных цветов. Будучи совершенно новым для шестнадцатеричной прозрачности цвета, я искал вокруг немного, хотя я не мог найти конкретный ответ на мой вопрос.
Я хочу установить прозрачность по шестнадцатеричному цвету, поэтому давайте скажем, что мой шестнадцатеричный идентификатор цвета "#33b5e5", и я хочу, чтобы он был прозрачным на 50%. Тогда я буду использовать "#8033b5e5", потому что 80-это 50%.
Я нашел здесь полезную диаграмму:http://www.dtp-aus.com/hexadeci.htm . С этими данными мне удалось придумать вот что:
0% = #00
10% = #16
20% = #32
30% = #48
40% = #64
50% = #80
60% = #96
70% = #112
80% = #128
90% = #144
теперь проблемы начинают появляться, когда я получаю выше 100 в hex. Сглаз цветовые коды могут быть только 8 символов справа? Например # 11233b5e5 (80%) аварийно завершает работу.
что я могу сделать, чтобы позволить мне использовать более высокие числа?
10 ответов:
вот правильная таблица процентов к шестнадцатеричным значениям. Например, для 50% Белого вы бы использовали #80FFFFFF.
- 100% - FF
- 95% - F2
- 90% - E6
- 85% - D9
- 80% - CC
- 75% - BF
- 70% - B3
- 65% - A6
- 60% - 99
- 55% - 8C
- 50% - 80
- 45% - 73
- 40% - 66
- 35% - 59
- 30% - 4D
- 25% - 40
- 20% - 33
- 15% - 26
- 10% - 1A
- 5% - 0D
- 0% - 00
(источник)
короткий ответ:
вы можете увидеть полную таблицу процентов к шестнадцатеричным значениям и выполнить код на этой детской площадке в https://play.golang.org/p/l1JaPYFzDkI .
краткое объяснение в псевдокоде
процент к шестнадцатеричным значениям
- decimal = процент * 255 / 100 . например: decimal = 50*255/100 = 127.5
- преобразование decimal в шестнадцатеричное значение . бывший: 127.5 in decimal = 7 * 16ˆ1 + 15 = 7F in hexadecimal
шестнадцатеричные значения в процентах
- преобразуйте шестнадцатеричное значение в десятичное. пример: D6 = 13 * 16ˆ1 + 6 = 214
- процент = (значение в десятичной системе ) * 100 / 255. экс : 214 *100/255 = 84%
дополнительная информация для преобразования десятичной шестнадцатеричной
длинный ответ: Как рассчитать в голове
проблема может быть решена в общем с помощью умножение крест.
у нас есть процент (в диапазоне от 0 до 100 ) и другое число (в диапазоне от 0 до 255), а затем преобразуется в шестнадцатеричное.
- 100 255 (FF в шестнадцатеричной системе)
- 0 0 (00 в шестнадцатеричном)
для 1%
- 1 * 255 / 100 = 2,5
- 2,5 в Гекса-это 2 если вы округлите его вниз.
для 2%
- 2 * 255 / 100 = 5
- 5 в Гекса-это 5 .
таблица в лучшем ответе дает процент с шагом 5%.
Как рассчитать цифры в голове ? Из-за 2.5 инкремент, добавьте 2 к первому и 3 к следующему
- 95% - F2 / / start
- 96% - F4 // добавить 2 к F2
- 97% - F7 // add 3 . Или F2 + 5 = F7
- 98% - F9 / / добавить 2
- 99% - FC / / add 3. 9 + 3 = 12 in hexa: C
- 100% - FF / / добавить 2
Я предпочитаю учить, как найти решение, а не передавать таблицу
дайте человеку рыбу, и вы кормите его в течение дня; научите человека ловить рыбу и ты кормишь его всю жизнь
цвет шестнадцатеричная нотация выглядит следующим образом: #AARRGGBB
- A: Альфа
- R : красный
- G : зеленый
- B : синий
вы должны сначала посмотреть, как шестнадцатеричное строительство. Вы можете написать не более FF.
эта диаграмма не показывает проценты. "#90" - это не "90%". Эта диаграмма показывает шестнадцатеричное преобразование в десятичное. Шестнадцатеричное число 90 (обычно представленное как 0x90) эквивалентно десятичному числу 144.
шестнадцатеричные числа являются базовыми-16, поэтому каждая цифра представляет собой значение между 0 и F. максимальное значение для двухбайтового шестнадцатеричного значения (например, прозрачность цвета) равно 0xFF или 255 в десятичном формате. Таким образом, 100% - это 0xFF.
Я построил этот небольшой вспомогательный метод для android-приложения, может пригодиться:
/** * @param originalColor color, without alpha * @param alpha from 0.0 to 1.0 * @return */ public static String addAlpha(String originalColor, double alpha) { long alphaFixed = Math.round(alpha * 255); String alphaHex = Long.toHexString(alphaFixed); if (alphaHex.length() == 1) { alphaHex = "0" + alphaHex; } originalColor = originalColor.replace("#", "#" + alphaHex); return originalColor; }
Это может быть очень поздний ответ.. Но эта диаграмма убивает его.
все процентные значения сопоставляются с шестнадцатеричными значениями.
попробуйте это в поиске google (или нажмите здесь)
255 * .2 to hex
он будет генерировать
0x33
как результат.однако google не округляет значения, поэтому вы можете использовать только 1-значные множители. если вы хотите использовать сказать .85, вы должны получить округленное значение 255 * .85 во-первых, затем введите
(rounded-value here) to hex
в поиске google.
Я понимаю, что это старый вопрос, но я столкнулся с ним, когда делал что-то подобное.
используя SASS, у вас есть очень элегантный способ конвертировать RGBA в hex ARGB:
ie-hex-str
. Я использовал его здесь в миксине.@mixin ie8-rgba ($r, $g, $b, $a){ $rgba: rgba($r, $g, $b, $a); $ie8-rgba: ie-hex-str($rgba); .lt-ie9 &{ background-color: transparent; filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#{$ie8-rgba}', endColorstr='#{$ie8-rgba}'); } } .transparent{ @include ie8-rgba(88,153,131,.8); background-color: rgba(88,153,131,.8); }
выходы:
.transparent { background-color: rgba(88, 153, 131, 0.8); } .lt-ie9 .transparent { background-color: transparent; filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#CC589983', endColorstr='#CC589983'); zoom: 1; }
используя python для вычисления этого, например (написано на python 3), прозрачность 50%:
hex(round(256*0.50))
:)
Я всегда продолжаю приходить сюда, чтобы проверить значение int/hex alpha. Таким образом, в конечном итоге создается простой метод в моем классе Java utils. Этот метод преобразует процент в шестнадцатеричное значение и добавляет к строковому значению цветового кода.
public static String setColorAlpha(int percentage, String colorCode){ double decValue = ((double)percentage / 100) * 255; String rawHexColor = colorCode.replace("#",""); StringBuilder str = new StringBuilder(rawHexColor); if(Integer.toHexString((int)decValue).length() == 1) str.insert(0, "#0" + Integer.toHexString((int)decValue)); else str.insert(0, "#" + Integer.toHexString((int)decValue)); return str.toString(); }
и
Utils.setColorAlpha(30, "#000000")
даст вам#4c000000