2009-07-29 22 views
13

He estado buscando una buena biblioteca de dibujo 2D multiplataforma que se pueda llamar desde C++ y se pueda usar para dibujar una geometría bastante simple; líneas, rectángulos, círculos y texto (horizontal y vertical) para algunos gráficos, y guarde el resultado en PNG.Biblioteca de dibujo multiplataforma

Creo que un paquete comercial sería preferible sobre el código abierto porque preferiríamos no tener que preocuparnos por los problemas de licencia (a menos que haya algo con una licencia de estilo BSD sin cláusula de crédito). Miré Cairo Graphics, que parecía prometedor, pero la representación del texto se ve como una mierda de la caja, y la actualización de la parte de atrás del texto nos lleva a terrenos de licencia turbia.

Lo necesito para Windows, Mac y Linux. Preferiblemente algo bastante ligero y simple de integrar. He pensado en Qt pero es demasiado pesado para nuestra aplicación.

Cualquier idea sobre esto sería increíble.

+2

Sí, es una lástima 'QImage' y' QPainter' están enterrados en 'QtGui' en lugar de en una 'QtPainting' lib separada. Cuando dividieron las librerías en Qt 4.0, no eran realmente utilizables sin una 'QApplication', pero hoy en día puedes usarlas en hilos separados, por lo que un' QtPainting' tendría mucho sentido, IMO. Esperemos Qt 5 :) –

Respuesta

12

Trate Anti-Grain Geometry. De la descripción:

Geometría Anti-Grain (AGG) es una biblioteca gráfica gratuita, de código abierto, escrita en C++ industrialmente estándar. Los términos y condiciones de uso AGG se describen en la página Licencia. AGG no depende de ninguna API o tecnología gráfica. Básicamente, puede pensar en AGG como un motor de renderizado que produce imágenes de píxeles en la memoria de algunos datos vectoriales. Pero, por supuesto, AGG puede hacer mucho más que eso. Las ideas y la filosofía de la AGG son:

  • anti-aliasing.
  • Precisión de subpíxeles.
  • La más alta calidad posible.
  • Alto rendimiento.
  • Independencia y compatibilidad de la plataforma.
  • Flexibilidad y extensibilidad.
  • Diseño liviano.
  • Confiabilidad y estabilidad (incluida la estabilidad numérica).
+0

Gracias, esto parece estar en mi calle, voy a verificarlo. – Gerald

+0

El otro día noté que mi unidad de GPS estaba usando AGG para la representación de mapas. ¡Ordenado! –

+5

Como un FYI, intenté en repetidas ocasiones contactar a los desarrolladores de AGG en relación con la obtención de una licencia comercial, y nunca obtuve una respuesta. También han pasado 2 años desde que se publicó alguna noticia en el sitio, por lo que asumo que ya no es compatible. Así que terminé de rodar mi propia solución personalizada en las 3 plataformas que necesitaba. Probablemente sea una buena solución si utilizo la versión anterior con la licencia no GPL, así que lo dejaré como la mejor respuesta, pero simplemente no quería tratar con una biblioteca no compatible. – Gerald

1
+2

He usado tanto SDL como SFML, y recomiendo encarecidamente SFML sobre SDL. Hace uso de construcciones C++ (OOP, overlods de funciones, ...), y es mucho más fácil y divertido. Para mí, la única desventaja posible es que todavía es una biblioteca reciente en comparación con SDL, por lo que puede no ser tan estable. –

+2

también, SDL no viene con funciones para dibujar las primitivas que enumera. Tienes que encontrar el código hecho por otros o codificarlo tú mismo. –

2

Antigrain hace la representación primitiva de alta calidad y parece ser capaz de representar las fuentes true type y tiene uso comercial disponible bajo petición.

http://www.antigrain.com/

0
+0

... no es una biblioteca. – cubuspl42

+0

Por favor explique su definición de una biblioteca. –

+0

Es algo que tiene código. OpenGL es solo una API estándar utilizada para hablar con GPU. No puedes vincularlo, no puedes comprarlo, no puedes descargarlo. Por cierto, llamar directamente a las funciones de OpenGL nunca es multiplataforma. Las bibliotecas como SDL o SFML son. – cubuspl42

1

Ha intentado FLTK? Es liviano, multiplataforma, tiene soporte para gráficos 2D/3D y viene con un buen conjunto de widgets (incluido un componente de gráficos). La API es simple y directa.

0

Me gustaría ir por AGG o Cairo.

1

También hay libgd - simple, pero bien escrito.

Con respecto a Cairo Graphics, no puedo creerlo renders text que se ve mal. Si está particularmente preocupado por la representación de texto, State of the Text Rendering de enero de 2010 ofrece una visión general bastante buena.

+0

Debería haber sido un poco más explícito; Cairo Graphics representa bien el texto grande, pero necesitaba convertir etiquetas de texto pequeñas en cuadros y gráficos, y eso es que parece una porquería porque usa gráficos vectoriales para representarlo. Siempre que el texto sea lo suficientemente grande como para al menos 2 líneas de píxeles, está bien, pero intente renderizar texto con un tamaño de fuente 8 aproximadamente y vea si puede leerlo;) – Gerald

1

Yo uso CImg: plataforma cruzada (archivo de encabezado único independiente), simple, conciso. PNG no es compatible de forma nativa, pero puede manejarse si está instalado ImageMagick (consulte supported formats).

Vea también este related question.

+0

Estoy muy impresionado con CImg. Por mucho, la más fácil de integrar de varias bibliotecas con las que jugué. –

6

Otro uno: Skia. Usado en Android y Chrome, en desarrollo activo, aceleración HW.

1

Puede usar Allegro 5 (ya que se mencionan SDL y SFML). Esto proporciona todas las plataformas que necesita (y más) y puede representar formas y guardar en PNG. La versión 5 tiene una API y una aceleración de hardware mucho mejores. Con cualquiera de estas bibliotecas multiplataforma de bajo nivel, debe encontrar su propia solución de gráficos.

Pongo algunas notas on my blog sobre Allegro y usándolo en la Mac.

+0

Esto se ve muy bien. ¿Sabes si es posible usarlo en una aplicación que tiene su propia administración de ventanas en lugar de usar la administración de ventanas de Allegro? – Gerald

Cuestiones relacionadas