我承认不知道 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 );
-再次编辑-
好的,我已经根据 LJ2 的答案使用 Wikipedia 的 Alpha Blending 函数重做公式。并让一位同事通过 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 中进行两者之间的转换。