формула для альфа-значения при смешивании двух прозрачных цветов - PullRequest
9 голосов
/ 07 сентября 2010

давайте предположим, что альфа 1 означает полностью непрозрачный, а 0 означает полностью прозрачный. Допустим, у меня есть два черных изображения с прозрачностью 50% (альфа = 0,5).

если они уложены друг на друга, полученная прозрачность равна 0,75, верно?

если бы у них была альфа 0,25, результат был бы около 0,5, верно?

если бы они имели альфа 0,9, результат был бы около 0,97, верно?

как добраться до этих номеров?

другими словами, я ищу функцию, которая получает результирующее альфа-значение от двух других альфа-значений.

float alpha = f(float alphaBelow, float alphaAbove)
{
     //TODO implement
}

Ответы [ 3 ]

7 голосов
/ 07 сентября 2010

Этот ответ математически совпадает с ответ Джейсона , но это фактическая формула, как вы найдете ее в справочном материале.

float blend(float alphaBelow, float alphaAbove) 
{ 
    return alphaBelow + (1.0 - alphaBelow) * alphaAbove; 
} 
7 голосов
/ 07 сентября 2010
float blend(float alphaBelow, float alphaAbove)
{
    return alphaBelow + alphaAbove - alphaBelow * alphaAbove;
}

Эта функция предполагает, что оба параметра равны 0..1, где 0 полностью прозрачен, а 1 полностью непрозрачен.

4 голосов
/ 07 сентября 2010

Фотошоп выполняет следующие вычисления:

float blend(float alphaBelow, float alphaAbove)
{
    return min(1,alphaBelow+(1-alphaBelow)*alphaAbove);
}
...