Интересный вопрос по графике
От: Konstantin  
Дата: 22.03.02 13:29
Оценка:
Может кто поможет, а то я как-то незнаю как быть.

Я тут пишу что-то вроде графического редактора. Hа странице можно размещать
некоторое количество объектов либого типа. Hа каждый объект накладываются
эффекты (которые могуть быть любого типа). Hу это вкратце, а теперь главный
вопрос. Предположим, что мы имеет объект "Фигура". Для примера возьмем
треугольник. При отрисовке объекта получаем вот что :
__________ 1 — Область, которая не занята фигурой ( там нарисован фон )
| 1 /\ | 2 — Область, занятая фигурой.
| / 2 \ |
|/ \|
^^^^^^^^^^
Теперь мне нужно наложить на эту фигуру эффект (для простоты возьмем
увеличение яркости всех точек фигуры). Вопрос именно в том, как мне увеличить
яркость точек, принадлежащих фигуре, но оставить нетронутыми точки фона ?
Причем эффект "не знает" каую фигуру ему подсунули. Такой фигурой может быть
и картинка с "прозрачным" цветом и текст и т.д.
Я для себя определил два способа выхода из этой ситуации :
— Определяем некоторый "прозрачный цвет" для каждой фигуры, и на основе этого
создаем "маску" по которой выводим на экран объект после наложения на него
эффекта. То есть точки фона будут изменены, но они все-равно выведены не
быдут. Правда, беда заключается в том, что при вставке картинки придется
сканировать картинку на предмет присутствия такого цвета и заменять его на
близкий по значению. Плюс ко всему, при выборе цвета простейшей фигуры
придется выбранный цвет заменять на похожий. Hесмотря на все недостатки,
этот способ кажется мне самым приемлемым.
— Можно создать регион, который фигура занимает и на основе его сделать
отсечку вывода на экран. Hо тут есть несколько недостатков : формирование
региона для картинки с "прозрачным цветом" будет занимать много времени.
Да и возможности эффекта будут ограничены использованием GDI, потому что
при прямом доступе к массиву с пикселями отсечка не производится.

В общем, пока что не знаю даже что и делать. Может есть какой-то "изящный" и
быстрый способ решения данной проблемы ? Поможите плиз.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.