Формула для альфа-значения при смешивании двух прозрачных цветов
Давайте предположим, что альфа 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 ответа
Этот ответ математически совпадает с ответом Джейсона, но это фактическая формула, как вы найдете ее в справочном материале.
float blend(float alphaBelow, float alphaAbove)
{
return alphaBelow + (1.0 - alphaBelow) * alphaAbove;
}
float blend(float alphaBelow, float alphaAbove)
{
return alphaBelow + alphaAbove - alphaBelow * alphaAbove;
}
Эта функция предполагает, что оба параметра равны 0..1, где 0 полностью прозрачен, а 1 полностью непрозрачен.
Фотошоп делает следующий расчет:
float blend(float alphaBelow, float alphaAbove)
{
return min(1,alphaBelow+(1-alphaBelow)*alphaAbove);
}