Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Алгоритм Ву для растеризации закрашенного эллипса с антиалиасингом

Поиск:
Этот алгоритм позволяет нарисовать закрашенный эллипс с использованием антиалиасинга, так что фигура не будет иметь резких краев. Обычные алгоритмы рисования эллипса рисуют все точки одним цветом, этот же алгоритм закрашивает разные участки края эллипса в разные цвета, и за счет этого "сглаживает" неровности.

Также следует отметить, что этот алгоритм принимает не целые размеры эллипса, а вещественные. При изменении координат эллипс, нарисованный алгоритмом Брэзенхема, перемещается резко, скачками. Эллипс по алгоритму Ву может перемещаться непрерывно. За счет этого можно обеспечивать плавную анимацию при рисовании движущихся изображений.

user posted image


Для рисования точки с координатами (x, y) вызывается процедура SetPixel, которая закрашивает пиксел с указанными координатами цветом со степенью полупрозрачности, заданной параметром Alpha. Значение параметра, равное 1, соответствует полностью прорисованному непрозрачному пикселю (например, белому, если мы рисуем белым по черному). Значение параметра, равное 0, соответствует полностью прозрачному пикселю (т.е. ничего не рисуется). Промежуточные значения соответствуют различным оттенкам серого, или же, в случае рисования цветных пикселей, определяются по формуле Cresult  = (1-α)·Cscreen  + α·Cpen  (формула применяется поочередно для каждой из трех компонент R, G и B).

Программист должен определить эту процедуру и написать код, который осуществляет соответствующие системные вызовы.

Рисование эллипса состоит из двух частей: из рисования границы и из закрашивания внутренней части. Граница рисуется по пикселам, а для закрашивания внутренней части используются процедуры SetVLine или SetHLine, служащие для закрашивания вертикальной или горизонтальной линии за один прием. Эти процедуры уже реализованы через обращение в цикле к процедуре SetPixel. Зачем же это нужно? Ведь можно напрямую обращаться к SetPixel.

Смысл этого в том, что на некоторых системах можно достаточно эффективно закрасить целую линию сразу, и это будет быстрее, чем закрашивать её по одной точке. В таком случае программисту достаточно только заменить тело этих двух процедур, чтобы получить существенный выигрыш в быстродействии.

При рисовании используется только один параметр - яркость. На практике приходится работать с цветными изображениями, поэтому число, передаваемое в процедуру SetPixel, следует рассматривать как множитель, на который домножаются компоненты R, G и B цвета отрезка. Если окружность рисуется на неоднородном фоне, то лучше рассматривать этот параметр, как альфа-значение, управляющее прозрачностью.

Принцип работы алгоритма идентичен принципу работы алгоритма Ву для отрезка.






Файлы:
wufilledellipse.gif

Просмотров: 3467

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную