Добрый день
Возникла совсем простенькая задачка которую однако решить не смог
Сначала хочу объяснить "исходную" - то что не вызывает никаких вопросов.
Есть исходный ARGB имедж (src). К нему применяются цепочки преобразований, назовем их "фильтры" (flt). Каждый фильтр - это еще один имедж + правило по которому он комбинируется с исходным имеджем. Результат фильтра подается как src для следующего фильтра. Для примера возьмем 2 простейших фильтра
1) Replace (src = flt). RGB исходного имеджа заменяются новыми
2) Multiply (src *= flt). RGB исходного имеджа умножаются на фильтр, результат подсекается до 1.0
Теперь причем здесь альфа. Для исходного имеджа она никак не учитывается - считаем что она всегда = 1. А вот альфа фильтра определяет "интенсивность" его применения. Примеры
- if (flt.a <= 0.0f) // фильтр не применяется вообще, пиксель остается неизменным
continue
- if (flt.a >= 1.0f) // фильтр применяется полностью
src = DoFilter(src, flt);
- if (flt.a > 0.0f && flt.a < 1.0) // фильтрованное значение смешивается с исходным по альфе фильтра
src = DoFilter(src. flt) * flt.a + src * (1.0f - flt.a);
Еще пример: исходный имедж был 100% синим, применяется красный фильтр с альфа 50%. Результат (0.5, 0.0, 0.5) - фиолетовый 50%. Альфа исходного имеджа (src) никак не учитывается и никак не накапливается.
Конечно Вы можете сказать "да зачем сотый раз объяснять как работает альфа маска - это и дураку понятно" - и это правда
Просто по опыту знаю - если сразу изложу задачу, то непонятки неизбежны (мол, а ты не объяснил и все такое). Поэтому если есть квешнзы - задавайте сейчас, сначала все выясним, а потом перейдем к тому "а что же надо сделать".
Спасибо