Какова формула комбинированной прозрачности двух наложенных прозрачных изображений? - PullRequest
2 голосов
/ 17 июня 2011

Если я хочу отобразить одно равномерно полупрозрачное изображение, а затем «затемнить» это изображение, постепенно заменяя его другим с такой же прозрачностью, сохраняя при этом общую прозрачность на постоянном уровне во время перехода, как мне это сделать?определить, какую прозрачность рисовать изображения?

Методом проб и ошибок - рисование прозрачных изображений различных альф друг над другом - я придумал график ниже, показывающий прозрачность изображения A на одной оси иПрозрачность изображения Б с ​​другой.Линии 'isoalpha' показывают комбинации альфы, которые приводят к одной и той же альфе на всем протяжении линии.Каждая строка для другого уровня альфа, с полностью прозрачным в левом верхнем углу.

Вы видите, что формула, которую я ищу, не является прямым линейным переходом с alphaA + alphaB == alphaTarget.

Какую математическую формулу я ищу?

Alpha cross-fade graph

Ось X - альфа изображения B (0-255 л).Ось Y - альфа изображения A (0-255 вниз).

1 Ответ

6 голосов
/ 17 июня 2011

Прозрачные пленки , умножить .

transparency_new = transparency_a * transparency_b

Однако, поскольку непрозрачность (альфа) является обратной прозрачности:

1 - opacity_new = (1 - opacity_a) * (1 - opacity_b)

или:

opacity_new = 1 - (1 - opacity_a) * (1 - opacity_b)

Масштабирование в зависимости от ситуации, если используется альфа-диапазон от 0 до 255 вместо 0 до 1,0

alpha_new = 255 * (1 - (1 - alpha_a / 255) * (1 - alpha_b / 255))

Я воспроизвел ваш график с помощью приведенной выше формулы и Grapher.app:

enter image description here

...