2

我在数据库中存储了一个颜色十六进制字符串,例如0x78dce6b0;我可以使用以下方法将其转换为 ARGB 颜色:

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

现在我想将其转换为在 HTML 页面中使用,因此我需要将其转换为 HTML 值,例如#cc3388. 如果我直接转换 using ColorTranslator.ToHtml(colorTL),我会失去 alpha 混合值。假设背景始终为白色,如何通过考虑 alpha 值来转换它?

4

3 回答 3

3

HTML 颜色没有Alpha组件。

不幸的是,不可能在不丢失组件的情况下转换ARGB为 HTML 。RGBAlpha

如果您想根据您的 alpha 值将颜色与白色混合...

  • 将每个 Hex 分量(A、R、G、B)转换为 0 到 255 之间的值,其中 FF 的值等于 255,00 等于 0。
  • 我们将这些 0-255 值命名为 A、R、G、B
  • 我们假设 Alpha 值为 255 表示“完全透明”,而 Alpha 值为 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 回答
1

没有一个提议对我有用,但后来使用 http://en.wikipedia.org/wiki/Alpha_compositing 提出了这个:

var useColor = Color.FromArgb(
                (int)((theStructureColor.R) * (theStructureColor.A / 255.0) + 255 - theStructureColor.A),
                (int)((theStructureColor.G) * (theStructureColor.A / 255.0) + 255 - theStructureColor.A),
                (int)((theStructureColor.B) * (theStructureColor.A / 255.0) + 255 - theStructureColor.A));
于 2013-11-08T15:12:17.117 回答
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 回答