2

次のようなデータベースに色の16進文字列が保存されています0x78dce6b0。次を使用して、これを ARGB カラーに変換できます。

string colorString=0x78dce6b0;
int hexColor = Convert.ToInt32(colorString ?? "0", 16);
Color colorTL = Color.FromArgb(hexColor);

これを変換して HTML ページで使用したいので、 のような HTML 値に変換する必要があります#cc3388。を使用して直接変換するColorTranslator.ToHtml(colorTL)と、アルファ ブレンディング値が失われます。背景が常に白であると仮定して、アルファ値を考慮して変換するにはどうすればよいですか?

4

3 に答える 3

3

AlphaHTML カラーにはコンポーネントがありません。

残念ながら、コンポーネントを失わずARGBに HTMLに変換することはできません。RGBAlpha

アルファ値に基づいて、色を白とブレンドしたい場合...

  • 各 Hex コンポーネント (A、R、G、B) を 0 から 255 の値に変換します。FF の値は 255 に相当し、00 は 0 に相当します。
  • これらの 0 ~ 255 の値に A、R、G、B という名前を付けます
  • アルファ値 255 は「完全に透明」を意味し、アルファ値 0 は「完全に不透明」を意味すると仮定します。
  • New_R = CInt((255 - R) * (A / 255.0) + R)
  • New_G = CInt((255 - G) * (A / 255.0) + G)
  • New_B = CInt((255 - G) * (A / 255.0) + B)
  • 最終的な HTML カラー文字列は次のようになります: "#" & cstr(New_R) & cstr(New_G) & cstr(New_B)
于 2011-06-01T02:52:19.270 に答える
0

つまり、実際に行っているのは、白い背景と半透明の前景色を組み合わせて、結果の表示色を計算することです。これは、適切な回答が投稿された2 つの色からの RGB の結果を計算する の重複した質問のようです。あなたの状況に適用するには、次のようになります (このコードはテストしていないことに注意してください)。

public static Color FromTransparentWithWhiteBG(Color A)
{
    // Assuming Alpha is a value between 0 and 254...
    var aFactor = (A.A/254);
    var bgAFactor = (1-(A.A/254));
    var background = Color.White;
    var R_c = (Int32)(Math.Ceiling((Double)A.R * aFactor) + Math.Ceiling ((Double)background.R * (1 - bgAFactor )));
    var G_c = (Int32)(Math.Ceiling((Double)A.G * aFactor) + Math.Ceiling ((Double)background.G * (1 - bgAFactor )));
    var B_c = (Int32)(Math.Ceiling((Double)A.B * aFactor) + Math.Ceiling ((Double)background.B * (1 - bgAFactor )));
    return Color.FromArgb(1, R_c, G_c, B_c);
}
于 2011-06-01T17:45:50.493 に答える