如何解决在白色背景下通过alpha混合将ARBG转换为RGB
|| 我有一个彩色十六进制字符串存储在数据库中,如“ 0”;我可以使用以下方法将其转换为ARGB颜色:string colorString=0x78dce6b0;
int hexColor = Convert.ToInt32(colorString ?? \"0\",16);
Color colorTL = Color.FromArgb(hexColor);
现在,我想将其转换为在HTML页面中使用,因此我需要转换为HTML值,例如#cc3388
。如果我直接使用ColorTranslator.ToHtml(colorTL)
进行转换,则会丢失alpha混合值。假设背景始终为白色,如何通过考虑alpha值来转换它?
解决方法
HTML颜色没有
Alpha
组件。
不幸的是,在不丢失Alpha
组件的情况下,不可能将ARGB
转换为HTMLRGB
。
如果您想根据自己的alpha值将颜色与白色混合,...
将每个十六进制分量(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)
, 提议中没有一个对我有用,但后来被使用了
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));
, 因此,您真正要做的是将白色背景与半透明的前景色结合起来,然后计算出最终的显示色。这似乎是一个重复的问题,即从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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。