Dibuja un rectángulo redondeado suavizado en c ++

Como está escrito en el título, me gustaría dibujar rectángulos redondeados con suavizado en c ++ y en un contexto de Linux (ubuntu). Ya probé SDL_gfx pero el suavizado no está disponible en las formas de RoundBox. También leí sobre SDL_Draw, pero creo que tampoco proporciona suavizado.

Es por eso que pregunto si alguien conoce un marco que proporcione este tipo de formas o si alguien conoce un algoritmo de suavizado (ligero) (lo necesito para el procesamiento de video en tiempo real).


Gracias Vjo, pero realmente no quiero usar openGL en mi soft ... ¡Y por cierto, creo que descubrí otra forma de dibujar rectángulos redondeados con suavizado!

Lo que no expliqué en la primera publicación es que ya estoy usando SDL y opencv en mi programa. Entonces tuve una idea:

  • dibuja un rectángulo redondeado de 1 canal con SDL_gfx
  • suavícelo con cvSmooth para obtener el antialiasing alfa
  • usar el resultado como el canal alfa de un rectángulo simple

Qué piensas sobre eso ? ¡Lo intentaré esta noche!

preguntado el 08 de noviembre de 11 a las 17:11

Funcionó, pero todavía es un poco feo. -

1 Respuestas

Las únicas partes de la forma que deben suavizarse son las esquinas. dibuje cuatro círculos de quater antialias, uno en cada esquina (el algoritmo de círculo de Xiaolin Wu es su mejor opción aquí), y cubra los espacios con líneas simples. Si las formas no se rotarán (es decir, todas las líneas rectas serán verticales u horizontales, use el algoritmo de línea sin suavizado de Bresenham, de lo contrario use el algoritmo de línea de Wu. Los algoritmos de suavizado de Wu son normalmente los más rápidos y dan muy buenos resultados).

Si realmente desea optimizar su resultado y está familiarizado con la programación en ensamblador x86, le sugiero que escriba las rutinas de dibujo utilizando lenguaje ensamblador en línea. Si se ajusta correctamente, el algoritmo de línea de wu se puede escribir en tan solo 15 instrucciones, y su algoritmo circular alrededor de 40-50 instrucciones.

Respondido el 01 de Septiembre de 12 a las 11:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.