Я признаю, что не знал Java для Android, но разве нельзя просто изменить цвет с # 6A8F6509 на # FF8F6509? В большинстве современных языков программирования цвет обычно кодируется как ## AARRGGBB.
AA = Hex of Alpha, от 0 (hex 00), полностью прозрачный, до 255 (hex FF), без прозрачности.
RR = Hex красной части цвета. Как и выше, 0 не красный, 255 полный красный.
GG = Гекс зеленого цвета.
BB = шестнадцатеричный синий.
-Edit-
На основе вашего обновления вы можете сделать это, чтобы получить цвет:
Для каждого из красного, зеленого и синего:
получите разницу между прозрачным цветом и цветом фона и умножьте это на значение альфа. Разделите это на 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, используя функцию альфа-смешивания Википедии. и коллега подтвердил это с помощью 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 для Java в Java отличается, double может быть Double / Single / Float, а int может быть Int32 / Int16 / Int64 / Byte. Я не помню, как конвертировать между двумя в Java, к сожалению.