#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 инструкций.