У меня есть два цвета с альфа-каналами, представленными в Android как целые числа, и мне нужно получить результат, на котором эти цвета накладываются друг на друга (как если бы у меня было два полупрозрачных вида друг на друга).
Я уже пытался использовать варианты ColorUtils.blendARGB
, но это не совсем то, что мне нужно.
Я могу легко рассчитать что-то вроде этого:
/**
* Takes receiver as top color and attempts to overlay it over param color.
* Result is basically [ColorUtils.blendARGB] but in overlay mode instead of blend mode.
*/
infix fun Int.overlay(bottomColor: Int): Int {
val ratio = 1 - ((Color.alpha(this) / 255f) * (Color.alpha(bottomColor) / 255f))
return ColorUtils.blendARGB(ColorUtils.setAlphaComponent(this, 255), ColorUtils.setAlphaComponent(bottomColor, 255), ratio)
}
Однако это очевидночто это не сработает, если оба цвета имеют альфа-канал, поскольку он полностью удалит альфа-канал.
Как я могу сохранить альфа-канал обоих наложенных цветов?