Прежде всего, если я создаю изображение, подобное вашему, я получаю окончательный цвет (0, 0.863, 0, 0.59)
. Так что вы можете проверить свои данные.
Смешивание цветов немного сложно. Показанная вами формула (C1 * (1 - A2) + C2 * A2
) - это формула смешивания цвета со сплошным фоновым цветом Но у нас нет сплошного фона. Мы хотим найти смешанный цвет (C, A)
, такой, чтобы этот цвет смешивался с любым сплошным фоновым цветом CB
, что дает тот же результат, что и первое смешивание (C1, A1)
с фоном, а затем (C2, A2)
с результирующим цветом. Мы можем выразить это в следующем уравнении:
A * C + (1 - A) * CB = A2 * C2 + (1 - A2) * (A1 * C1 + (1 - A1) * CB)
После некоторой реорганизации:
A * C - A * CB = A2 * C2 + A1 * C1 - A2 * A1 * C1 + (A1 * A2 - A1 - A2) * CB
Из этого мы видим, что два фактора CB
должны совпадать с двух сторон, то есть
- A = A1 * A2 - A1 - A2
И, следовательно,
A = A1 + A2 - A1 * A2
А цвет равняется
A * C = A2 * C2 + A1 * C1 - A2 * A1 * C1
C = (A2 * C2 + A1 * C1 - A2 * A1 * C1) / A
В этом случае это оценивается как 0.847
. Все еще существует небольшая разница с наблюдаемым значением 0.866
, но я бы посчитал это ошибкой округления.
Также обратите внимание, что в GIMP есть два режима композитинга. Линейный режим RGB и режим восприятия. Режим восприятия, по-видимому, выполняет смешивание в гамма-скорректированном пространстве.