Добрый день
Есть фабрика эффектов (десятка 2) применяющихся к изображению. Псевдокод
C++ (Qt)
struct Effect {
Effect( arg1, arg2, ... ); // опции задаваемые пользователем
virtual void Apply( ARGB & pixel, const Options & ); // действия/применение самого эффекта
virtual void OpenUI( Options & ); // UI где юзер меняет опции эффекта
};
Можно сказать и "плагин" (вместо "эффект")
Задача сделать эффекты селективными, т.е. юзер задает маску (в простейшем случае альфа-канал, хотя есть и др варианты). На первый взгляд все просто: пусть все эффекты выполняются как сейчас, а потом смешали/взвесили результат с исходным по маске. К сожалению, так не выходит. Пример: эффект "вращение". Если мы хотим иметь "половину вращения" - надо уменьшить угол поворота вдвое - но не смешивать с исходным. Юзер хочет видеть бубочку в UI эффекта (рядом с параметром "angle") где он сможет назначить/сменить маску.
Прямолинейное решение: перелопатить все UI и все опции (со всеми вытекающими). А как это сделать "более идейно" ?
Спасибо