![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Математика наложения [D7, WinXP]
Ricks © (2007-04-02 11:03:00)Есть две картинки, содержащие alpha канал (будем считать это слоями). Как наложить их друх на друга так, чтобы цвета этих точек усреднялись должным образом. Например:
если на полупрозрачный (50%) черный наложить 50% белый то получим 75% цвет (170, 170, 170), если же наоборот — получим 75% цвет (85, 85, 85).
Значение альфа вычисляется по формуле:
A = (a0/255 + (1-a0/255)*a1/255) * 255;
А вот как быть с цветом?
oxffff (2007-04-02 13:38:00) [1]
> А должны были получить (255, 255, 255, 127)!
Кто должен?
TRUNK (2007-04-02 12:42:00) [2]Перед автором стоит задача преобразовать два последовательных наложение в одно, которое приведёт к эквивалентному результату.
> если он полупрозрачный, откуда (255, 255, 255)?
> (127, 127, 127) как раз и означает, что черезн него "просвечивается"
> черный
Наложение происходит на полностью прозрачныйчёрный цвет, т.е. его как бы и нет, в результате у нас остаётся только наложенный белый.
Ricks (2007-04-02 12:39:00) [3]
> TRUNK ©
СПАСИБО тебе огромное!!!!
Ricks (2007-04-02 12:37:00) [4]
> ЮЮ
> "просвечивается" черный
но ведь черный то — полностью прозрачный, т.е никакого черного там не должно быть!
ЮЮ (2007-04-02 12:33:00) [5]> А должны были получить (255, 255, 255, 127)!
если он полупрозрачный, откуда (255, 255, 255)?
(127, 127, 127) как раз и означает, что черезн него "просвечивается" черный. В результате имеем "серый"
Ricks (2007-04-02 12:32:00) [6]Сейчас испытаю!
TRUNK (2007-04-02 12:29:00) [7]NewAlpha = 1 - (1-Alpha_1)*(1-Alpha_2);
NewRed = (Red_1*Alpha_1*(1-Alpha_2) + Red_2*Alpha_2)/NewAlpha
NewGreen = (Green_1*Alpha_1*(1-Alpha_2) + Green_2*Alpha_2)/NewAlpha
NewBlue = (Blue_1*Alpha_1*(1-Alpha_2) + Blue_2*Alpha_2)/NewAlpha
P.S. Все значения в диапазоне [0..1]
Ricks (2007-04-02 12:25:00) [8]Спасибо, но эта формула не работает.
Смотри:
если фон (0, 0, 0, 0) (полность. прозрачный черный цвет) и на него мы накладываем 50% (255, 255, 255, 127) белый то получим в итоге:
255 * 127 / 255 + {0 * (255 - 127) / 255]|=0} = 127
А должны были получить (255, 255, 255, 127)!
oxffff (2007-04-02 12:08:00) [9]Примени эту формулу для R,G,B составляющих по отдельности
oxffff (2007-04-02 12:07:00) [10]displayColor = sourceColor* alpha/255 + backgroundColor* (255 – alpha) /255
Ricks (2007-04-02 12:01:00) [11]Хотя может быть и формула для alpha неправильная... :(