Шестнадцатеричная прозрачность в цветах
Я работаю над реализацией опции прозрачности виджета для моего виджета приложения, хотя у меня возникают некоторые проблемы с получением правильных шестнадцатеричных значений цвета. Будучи совершенно новым для прозрачности в шестнадцатеричном виде, я немного искал, хотя не мог найти конкретный ответ на свой вопрос.
Я хочу установить прозрачность с помощью шестнадцатеричного цвета, скажем, мой шестнадцатеричный идентификатор цвета "#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 в гексе. Шестнадцатеричные цветовые коды могут быть длиной всего 8 символов, верно? Например #11233b5e5 (80%) вылетает.
Что я могу сделать, чтобы позволить мне использовать более высокие числа?
10 ответов
Вот правильная таблица процентов к шестнадцатеричным значениям. Например, для 50% белого вы бы использовали # 80FFFFFF.
- 100% - FF
- 95% - F2
- 90% - E6
- 85% - D9
- 80% - СС
- 75% - BF
- 70% - B3
- 65% - А6
- 60% - 99
- 55% - 8C
- 50% - 80
- 45% - 73
- 40% - 66
- 35% - 59
- 30% - 4D
- 25% - 40
- 20% - 33
- 15% - 26
- 10% - 1А
- 5% - 0D
- 0% - 00
( источник)
Короткий ответ
Вы можете просмотреть полную таблицу процентного отношения к шестнадцатеричным значениям и запустить код на этой площадке в https://play.golang.org/p/l1JaPYFzDkI.
Краткое объяснение в псевдокоде
Процент к шестнадцатеричным значениям
- десятичный = процент * 255 / 100 . например: десятичная = 50*255/100 = 127,5
- преобразовать десятичное в шестнадцатеричное значение. например: 127,5 в десятичном виде = 7*16ˆ1 + 15 = 7F в шестнадцатеричном
Шестнадцатеричные значения в процентах
- преобразовать шестнадцатеричное значение в десятичное. например: 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 // старт
- 96% - F4 // добавить 2 к F2
- 97% - F7 // добавить 3 . Или F2 + 5 = F7
- 98% - F9 // добавить 2
- 99% - FC // добавить 3. 9 + 3 = 12 в гекса: C
- 100% - FF // добавить 2
Я предпочитаю учить, как найти решение, а не вручать стол
Дайте человеку рыбу, и вы накормите его на день; научи человека ловить рыбу и ты накормишь его на всю жизнь
Цветная шестнадцатеричная запись выглядит следующим образом: #AARRGGBB
- A: альфа
- R: красный
- G: зеленый
- B: синий
Сначала вы должны посмотреть, как работает шестнадцатеричное. Вы можете написать не более FF.
Я создал этот небольшой вспомогательный метод для приложения 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;
}
Этот график не показывает проценты. "#90" - это не "90%". На этом графике показано преобразование шестнадцатеричного в десятичное. Шестнадцатеричное число 90 (обычно представленное как 0x90) эквивалентно десятичному числу 144.
Шестнадцатеричные числа - это основание-16, поэтому каждая цифра - это значение от 0 до F. Максимальное значение для двухбайтового шестнадцатеричного значения (такого как прозрачность цвета) составляет 0xFF или 255 в десятичном виде. Таким образом, 100% - это 0xFF.
Это может быть очень поздний ответ. Но эта таблица убивает его.
Все процентные значения отображаются в шестнадцатеричные значения.
Попробуйте это в поиске Google (или нажмите здесь)
255 * .2 to hex
это будет генерировать 0x33
в следствии.
Однако Google не округляет значения, поэтому вы можете использовать только однозначные множители. если вы хотите использовать, скажем,.85, вы должны сначала получить округленное значение 255 *.85, затем набрать (rounded-value here) to hex
в поиске гугл.
Я понимаю, что это старый вопрос, но я сталкивался с ним, когда делал что-то подобное.
Используя SASS, у вас есть очень элегантный способ конвертировать RGBA в шестнадцатеричный 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. Итак, в итоге я создаю простой метод в моем классе Ja va-утилит. Этот метод преобразует процент в шестнадцатеричное значение и добавляет к строковому значению кода цвета.
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