1395

16 進数の色の値を正しく取得するのに問題がありますが、アプリ ウィジェットにウィジェットの透明度オプションを実装する作業を行っています。16 進数の色の透明度にまったく慣れていないので、質問に対する具体的な答えが見つかりませんでしたが、少し調べてみました。

16 進数の色で透明度を設定したいので、16 進数の色 ID を「#33b5e5」としましょう。50% 透明にしたいとします。次に、80 は 50% であるため、「#8033b5e5」を使用します。

ここで便利なチャートを見つけました: 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

16進数で100を超えると、問題が発生し始めます。16 進数のカラーコードは 8 シンボルまでですよね?たとえば、#11233b5e5 (80%) がクラッシュします。

より高い数値も使用できるようにするにはどうすればよいですか?

4

10 に答える 10

3975

不透明度の 16 進値に対するパーセンテージの正しい表を次に示します。たとえば、50% の白の場合は #80FFFFFF を使用します。代わりに透明度の観点から考えるには、パーセンテージの順序を反転します (不透明度が高い = 透明度が低くなります)。

% 16 進数
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

(ソースの質問)

于 2013-06-21T16:15:35.430 に答える
167

簡潔な答え

https://play.golang.org/p/l1JaPYFzDkIで、 16 進値に対するパーセンテージの完全な表を確認し、この Playground でコードを実行できます。

疑似コードでの簡単な説明

16 進値に対する割合

  1. 小数= パーセンテージ * 255 / 100 . 例: 10 進数 = 50*255/100 = 127.5
  2. 10 進数を 16 進数値に変換します。例: 10 進数で 127.5 = 7*16^1 + 15 = 16 進数で 7F

16 進数からパーセンテージへ

  1. 16 進数値を 10 進数に変換します。例: D6 = 13*16^1 + 6 = 214
  2. パーセンテージ = (10 進数の値) * 100 / 255。例: 214 *100/255 = 84%

10 進数 <=> 16 進数の変換に関する詳細情報

長い答え: 頭の中で計算する方法

この問題は、交差乗算によって一般的に解決できます。

パーセンテージ (0 から 100 の範囲) と別の数値 (0 から 255 の範囲) があり、16 進数に変換されます。

  • 100 <==> 255 (16 進数で FF)
  • 0 <==> 0 (16 進数で 00)

1%

  • 1 * 255 / 100 = 2,5
  • 16 進数の 2,5 は、切り捨てると2になります。

2%

  • 2 * 255 / 100 = 5
  • ヘキサの 5 は5です。

ベストアンサーの表は、5% 刻みでパーセンテージを示しています。

あなたの頭の中で間の数字を計算する方法は?2.5のインクリメントのため、最初に 2 を追加し、次に 3 を追加します。

  • 95% — F2 // 開始
  • 96% — F4 // F2 に 2 を加算
  • 97% — F7 // 3 を追加します。または F2 + 5 = F7
  • 98% — F9 // 2 を追加
  • 99% — FC // 3 を追加します。9 + 3 = 12 を 16 進数で : C
  • 100% — FF // 2 を加算

結果がどこから来るのかわからない回答表を示すよりも、解決策を見つける方法を教える方が好きです。

ある人に魚を与えれば、あなたはその人を一日養うことができます。人に魚釣りを教えれば一生食べられる

于 2015-03-19T10:14:49.177 に答える
22

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;
}
于 2014-06-24T11:03:58.267 に答える
8

Google検索でこれを試してください(またはここをクリックしてください

255 * .2 to hex

0x33結果として生成されます。

ただし、Google は値を四捨五入しないため、1 桁の乗数しか使用できません。たとえば .85 を使用する場合は、最初に 255 * .85 の丸め値を取得してから(rounded-value here) to hex、Google 検索を入力する必要があります。

于 2014-06-11T06:09:28.130 に答える
4

これは古い質問だと思いますが、似たようなことをしているときに出くわしました。

SASS を使用すると、RGBA を 16 進 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;
}

于 2015-12-09T19:44:51.097 に答える
4

python を使用してこれを計算すると、たとえば (python 3 で記述)、50% の透明度:

hex(round(256*0.50))

:)

于 2014-12-12T02:16:15.600 に答える
-1

私はいつもここに来て、int/hex アルファ値をチェックしています。したがって、Java utils クラスで単純なメソッドを作成することになります。このメソッドは、パーセンテージを 16 進値に変換し、カラー コード文字列値に追加します。

 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

于 2016-05-13T08:01:40.677 に答える