Нарисуйте сглаженный прямоугольник с закругленными углами в C ++ - PullRequest
0 голосов
/ 08 ноября 2011

Как написано в заголовке, я хотел бы нарисовать прямоугольники со сглаживанием в c ++ и в контексте Linux (Ubuntu). Я уже пробовал SDL_gfx, но сглаживание недоступно для округленных фигур. Я также читал о SDL_Draw, но я думаю, что он не обеспечивает антиалиасинга.

Вот почему я спрашиваю, знает ли кто-нибудь фреймворк, обеспечивающий такие формы, или кто-нибудь знает (легкий) алгоритм сглаживания (мне это нужно для обработки видео в реальном времени).


Спасибо, Vjo, но я действительно не хочу использовать openGL в моем программном обеспечении ... И, кстати, я думаю, что нашел другой способ рисовать сглаженные прямоугольники со скругленными углами!

В первом посте я не объяснил, что в моей программе уже используются SDL и opencv. Итак, у меня была идея:

  • Нарисуйте прямоугольник с 1 каналом с SDL_gfx
  • сгладьте его с помощью cvSmooth, чтобы получить альфа-сглаживающую альфа
  • использовать результат в качестве альфа-канала простого прямоугольника

Что вы думаете об этом? Я попробую сегодня вечером!

1 Ответ

0 голосов
/ 01 сентября 2012

Единственными частями фигуры, которые должны быть сглажены, являются углы.Нарисуйте четыре сглаженных четвертичных круга, по одному на каждом углу (алгоритм круга Сяолиня Ву - ваша лучшая ставка здесь), и ликвидируйте пропуски простыми линиями.Если фигуры не будут повернуты (то есть все прямые линии будут вертикальными или горизонтальными, используйте алгоритм не сглаживания линий Брезенхэма, в противном случае используйте алгоритм линий У. Алгоритмы Ву обычно бывают самыми быстрыми и дают очень хорошие результаты.

Если вы действительно хотите оптимизировать свой результат и знакомы с программированием на ассемблере x86, я предлагаю написать процедуры рисования с использованием встроенного языка ассемблера. Правильно настроенный строчный алгоритм wu может быть записан всего за 15 инструкций, а егоалгоритм круга около 40-50 инструкций.

...