我有一个颜色#6A8F6509
我想删除该颜色的Alpha部分,只留下RGB组件(即#RRGGBB)。
结果颜色必须与没有透明度的初始颜色相同。
如何在Android的Java上进行此操作?
更新:初始背景始终为白色(#FFF)
答案 0 :(得分:24)
int newColor = oldColor | 0xFF000000;
答案 1 :(得分:12)
如果您想使用代码执行此操作,可以尝试使用以下代码:
static int stripAlpha(int color){
return Color.rgb(Color.red(color), Color.green(color), Color.blue(color));
}
答案 2 :(得分:4)
对于每种颜色: C'= C(a / 255)+ 255(1-(a / 255))
所以#6A8F6509:
R'= 143(106/255)+ 255(1-(106/255)=(约)208
G'= 101(106/255)+ 255(1-(106/255)=(约)191
B'= 9(106/255)+ 255(1-(106/255)=(约)153
所以你的答案应该是:#D0BF99,如果我的数学是正确的。这仅适用于全白色背景 - 对于非白色背景,第二个加数应具有背景的相应颜色值,而不是255.
- 编辑 -
再次查看公式,我不完全确定公式是应用于每种颜色还是整个颜色(快速视觉测试应该能够告诉你 - 我猜每种颜色)。我应该指出,这是直接来自Alpha Compositing wiki页面的公式:
http://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
答案 3 :(得分:1)
尝试
#FF8F6509
前两位数字表示任何颜色的alpha值。
答案 4 :(得分:1)
我承认不了解Android的Java,但你不能只将#6A8F6509的颜色更改为#FF8F6509吗?在大多数现代编程语言中,颜色通常编码为## AARRGGBB。
AA = Alpha的十六进制,范围从0(十六进制00),全透明,到255(十六进制FF),无透明度。
RR =颜色的红色部分的十六进制。与上面类似,0表示没有红色,255表示全红色。
GG =绿色的十六进制。
BB =蓝色的十六进制。
- 编辑 -
根据您的更新,您可以执行此操作以获取颜色:
对于红色,绿色和蓝色中的每一个: 获取透明颜色和背景颜色之间的差异,并将其乘以alpha值。除以255(十六进制FF,如果您愿意)。最后,将该数字添加到透明颜色的值中。
在你的情况下:
int transparentR = 0x8F;
int transparentG = 0x65;
int transparentB = 0x09;
int backgroundR = 0xFF;
int backgroundG = 0xFF;
int backgroundB = 0xFF;
int alpha = 0x6A;
int newR = transparentR + ( ( (backgroundR - transparentR) * alpha ) / 255 );
int newG = transparentR + ( ( (backgroundG - transparentG) * alpha ) / 255 );
int newB = transparentR + ( ( (backgroundB - transparentB) * alpha ) / 255 );
-Edit,再次 -
好的,我使用维基百科的Alpha Blending功能重写了基于LJ2答案的公式。并让一位同事用Paint.Net证实了这一点。这是背景颜色完全不透明的版本,它在C#中,抱歉:
int transparentColor2(int intFgColor, int intBgColor, int intAlpha)
{
double dAlpha = (Convert.ToDouble(intAlpha)/255.0);
double dFirst = Convert.ToDouble(intFgColor) * dAlpha;
double dSecond = Convert.ToDouble(intBgColor) * (1 - dAlpha);
return Convert.ToInt32(dFirst + dSecond);
}
为每个R,G和B值执行此操作,您应该得到正确的答案。 Incase Android的Java有不同,double可以是Double / Single / Float,int可以是Int32 / Int16 / Int64 / Byte。遗憾的是,我不记得如何用Java在两者之间进行转换。