Шестнадцатеричная прозрачность в цветах [дубликат]

этот вопрос уже есть ответ здесь:

  • понимание цветов на Android (шесть символов) 7 ответов

Я работаю над реализацией опции прозрачности виджета для моего виджета приложения, хотя у меня возникли проблемы с получением шестнадцатеричных значений цвета. Будучи совершенно новым для прозрачности цвета hex, я искал вокруг немного, хотя я не мог найти конкретного ответа на свой вопрос.

Я хочу задать прозрачность, шестигранный цвет так скажем моего наговора цвет ID "#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% - 4Д
  • 25% - 40
  • 20% - 33
  • 15% - 26
  • 10% - 1A
  • 5% - 0d с
  • 0% - 00

(источник)


короткий ответ:

вы можете увидеть полную таблицу процентов к шестнадцатеричным значениям и выполнить код в этой детской площадки в https://play.golang.org/p/l1JaPYFzDkI .

краткое объяснение в псевдокоде

процент до шестнадцатеричных значений

  1. decimal = процент * 255 / 100 . пример: decimal = 50*255/100 = 127.5
  2. преобразование decimal в шестнадцатеричное значение . бывший: 127.5 в десятичном = 7 * 16ˆ1 + 15 = 7F в шестнадцатеричном

шестнадцатеричные значения в процентах

  1. преобразовать hexaxdecimal значение в десятичное. пример: D6 = 13*16ˆ1 + 6 = 214
  2. percentage = (значение в десятичной дроби) * 100 / 255. экс : 214 *100/255 = 84%

больше информации для преобразования decimal hexadecimal

длинный ответ: Как рассчитать в голове

проблема может быть решена в общем случае умножение крест.

у нас есть процент (от 0 до 100 ) и другое число (от 0 до 255), затем преобразуется в шестнадцатеричное.

  • 100 255 (FF в шестнадцатеричной системе)
  • 0 0 (00 в шестнадцатеричном)

для 1%

  • 1 * 255 / 100 = 2,5
  • 2,5 в hexa является 2 если вы округлите его.

для 2%

  • 2 * 255 / 100 = 5
  • 5 в hexa является 5 .

таблица в лучшем ответе дает процент шаг за шагом 5%.

Как рассчитать цифры в голове ? Из-за 2.5 инкремент, добавьте 2 к первому и 3 к следующему

  • 95% - F2 / / start
  • 96% - F4 / / добавить 2 к F2
  • 97% - F7 / / add 3 . Или F2 + 5 = Ф7
  • 98% - F9 / / добавить 2
  • 99% - FC / / add 3. 9 + 3 = 12 в hexa: C
  • 100% - FF / / добавить 2

Я предпочитаю учить, как найти решение, а не передавать таблицу

дайте человеку рыбу, и вы кормите его в течение дня; научите человека ловить рыбу и ты кормишь его всю жизнь!--7-->


цвет шестнадцатеричное обозначение выглядит следующим образом: #AARRGGBB

  • A: alpha
  • 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;
}

enter image description here

Это может быть очень поздний ответ.. Но эта диаграмма убивает его.

все процентные значения сопоставляются с шестнадцатеричными значениями.

http://online.sfsu.edu/chrism/hexval.html


попробуйте это в Google search (или нажмите здесь)

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