Нарисуйте сглаженный закругленный прямоугольник на c

#c #linux #opencv #sdl #antialiasing

#c #linux #opencv #sdl #сглаживание

Вопрос:

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

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


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

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

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

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

Комментарии:

1. Это сработало, но все еще немного некрасиво.

Ответ №1:

Единственными частями фигуры, которые необходимо сгладить, являются углы. нарисуйте четыре сглаженных четвертичных круга, по одному в каждом углу (здесь вам лучше всего подойдет алгоритм круга Xiaolin Wu), и заполните пробелы простыми линиями. Если фигуры не будут поворачиваться (то есть все прямые линии будут либо вертикальными, либо горизонтальными), используйте алгоритм Брезенхема без сглаживания линий, в противном случае используйте алгоритм Wu line. Алгоритмы сглаживания Wu, как правило, самые быстрые и дают очень хорошие результаты.

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