El Cairo (gráficos)

Biblioteca de software basada en gráficos vectoriales
Autor(es) original(es)Keith Packard y Carl Worth [1]
Desarrollador(es)Carl Worth, Behdad Esfahbod
Lanzamiento inicialAntes de 2003 ; hace 21 años [2] ( 2003 )
Versión estable
1.18.2 (1 de septiembre de 2024 ; hace 30 días [3] ) [±] }  ( 01-09-2024 )
Repositoriogitlab.freedesktop.org/cairo/cairo
Escrito endo
TipoBiblioteca de gráficos
LicenciaLicencia Pública General Reducida GNU versión 2.1 (solamente) o Licencia Pública Mozilla 1.1
Sitio webwww.cairographics.org

Cairo (estilizado como cairo ) es una biblioteca de gráficos de código abierto que proporciona una API independiente del dispositivo basada en gráficos vectoriales para desarrolladores de software . Proporciona primitivas para dibujos bidimensionales en varios backends diferentes . Cairo utiliza aceleración de hardware [4] cuando está disponible.

Arquitectura de software

Enlaces de idioma

Una biblioteca escrita en un lenguaje de programación puede usarse en otro lenguaje si se escriben enlaces ; Cairo tiene una variedad de enlaces para varios lenguajes, incluidos C++ , C# y otros lenguajes CLI , Delphi , Eiffel , Fortran , Factor , Harbour , Haskell , Julia , Lua , Perl , PHP , Python , Ruby , Rust , Scheme , Smalltalk y varios otros como Gambas (como Visual Basic). [5]

Enlaces del kit de herramientas

Dado que Cairo es solo una biblioteca de dibujos, puede resultar muy útil integrarlo con un kit de herramientas de interfaz gráfica de usuario.

  • FLTK tiene soporte completo para Cairo (a través --enable-cairodel modificador de compilación).
  • GTK comenzó en 2005, con la versión 2.8, a utilizar Cairo para renderizar la mayoría de sus elementos de control gráfico , y desde la versión 3.0 todo el renderizado se realiza a través de Cairo.
  • El equipo de desarrollo de Cairo mantiene instrucciones actualizadas para renderizar superficies en SDL . [6]

Back-ends disponibles

Cairo admite la salida (incluida la rasterización ) a una serie de back-ends diferentes , conocidos como "superficies" en su código. La compatibilidad con back-ends incluye la salida al sistema X Window , a través de Xlib y XCB , Win32 GDI , OS X Quartz Compositor , la API BeOS , OS/2 , contextos OpenGL (directamente [7] y a través de glitz), búferes de imágenes locales, archivos PNG , PDF , PostScript , DirectFB y archivos SVG .

Hay otros back-ends en desarrollo que apuntan a las API gráficas OpenVG , [8] Qt , [9] Skia , [10] y Direct2D de Microsoft . [11] Los back-ends BeOS, OS/2 y DirectFB se abandonaron en 2022. [12]

Modelo de dibujo

El modelo de dibujo de El Cairo

El modelo de dibujo de El Cairo se basa en un modelo de tres capas.

Cualquier proceso de dibujo se realiza en tres pasos:

  1. Primero se crea una máscara, que incluye una o más primitivas o formas vectoriales, es decir, círculos, cuadrados, fuentes TrueType , curvas Bézier , etc.
  2. Luego se debe definir la fuente, que puede ser un color, un degradado de color, un mapa de bits o algún gráfico vectorial, y a partir de las partes pintadas de esta fuente se realiza un troquelado con ayuda de la máscara definida anteriormente.
  3. Finalmente, el resultado se transfiere al destino o superficie, que es proporcionado por el back-end para la salida.

Esto constituye un enfoque fundamentalmente diferente de los gráficos vectoriales escalables (SVG), que especifica el color de las formas con reglas de hojas de estilo en cascada (CSS). [ cita requerida ] Mientras que Cairo crearía una máscara de una forma, luego crearía una fuente para ella y luego las transferiría a la superficie, un archivo SVG simplemente especificaría la forma con un styleatributo. Dicho esto, los modelos no son incompatibles; muchos renderizadores SVG usan Cairo para el trabajo pesado. [13]

Ejemplo

Imagen SVG generada por este ejemplo

Se pueden dibujar gráficos bastante complejos de " Hola mundo " con la ayuda de Cairo con solo unas pocas líneas de código fuente :

#include <cairo-svg.h> #incluir <stdio.h> int principal ( int argc , char ** argv ) {      cairo_superficie_t * superficie = cairo_svg_superficie_create ( "Cairo_ejemplo.svg" , 100.0 , 100.0 );      cairo_t * cr = cairo_create ( superficie );    /* Dibuja los cuadrados en el fondo */ para ( int x = 0 ; x < 10 ; ++ x )         para ( int y = 0 ; y < 10 ; ++ y )         cairo_rectángulo ( cr , x * 10.0 , y * 10.0 , 5 , 5 );         cairo_pattern_t * patrón = cairo_pattern_create_radial ( 50 , 50 , 5 , 50 , 50 , 50 );         cairo_pattern_add_color_stop_rgb ( patrón , 0 , 0.75 , 0.15 , 0.99 );     cairo_pattern_add_color_stop_rgb ( patrón , 0.9 , 1 , 1 , 1 );     cairo_set_source ( cr , patrón );  el cairo_rellenar ( cr ); /*Escritura en primer plano*/ cairo_establecer_tamaño_de_fuente ( cr , 15 );   cairo_select_font_face ( cr , "Georgia" , EL_CAIRO_FONT_SLANT_NORMAL , EL_CAIRO_FONT_WEIGHT_BOLD );     cairo_set_source_rgb ( cr , 0 , 0 , 0 );     el cairo_mover_a ( cr , 10,25 ) ;   cairo_show_text ( cr , "Hola" );  el cairo_mover_a ( cr , 10,75 ) ;   cairo_show_text ( cr , "Wikipedia!" );  el cairo_destruir ( cr ); cairo_surface_destroy ( superficie );}

Uso notable

Cairo es popular en la comunidad de código abierto por brindar soporte multiplataforma para dibujo 2D avanzado.

  • GTK , a partir de 2005 con la versión 2.8, utiliza Cairo para renderizar la mayoría de sus elementos de control gráfico . [14] Desde la versión 3 de GTK, todo el renderizado se realiza utilizando Cairo.
  • El Proyecto Mono , [16] incluyendo Moonlight , [17] ha estado usando Cairo desde el comienzo de su concepción para impulsar los back-ends de sus espacios de nombres GDI+ (libgdiplus) y System.Drawing .
  • El proyecto Mozilla ha hecho uso de Cairo en su motor de diseño Gecko , utilizado para representar la salida gráfica de los productos de Mozilla. Gecko 1.8, el motor de diseño para Mozilla Firefox 2.0 y SeaMonkey 1.0, utilizó Cairo para representar contenido SVG y <canvas> . Gecko 1.9, [18] la versión de Gecko que sirve como base de Firefox 3 , utiliza Cairo como back-end gráfico para representar tanto el contenido de la página web como la interfaz de usuario (o "chrome").
  • El marco WebKit utiliza Cairo para todas las representaciones en los puertos GTK y EFL . También se agregó compatibilidad con contenido SVG y <canvas> mediante Cairo.
  • La biblioteca Poppler utiliza Cairo para renderizar documentos PDF. Cairo permite dibujar gráficos vectoriales suavizados y objetos transparentes.
  • La aplicación de gráficos vectoriales Inkscape utiliza la biblioteca Cairo para su visualización en modo de contorno, así como para la exportación a PDF y PostScript desde la versión 0.46. [19]
  • La versión original de Manim , conocida como ManimCairo, era un motor de animación matemática utilizado en las animaciones de los vídeos de YouTube de 3Blue1Brown. Desde entonces, Manim ha pasado a utilizar OpenGL . Esta versión se conoce como ManimGL. [20]
  • MorphOS 2.5 presenta una implementación de biblioteca compartida de Cairo, que estaba disponible como versión independiente para versiones anteriores de MorphOS.
  • AmigaOS 4.1 admite una biblioteca de objetos compartidos de Cairo (libcairo.so) en su instalación predeterminada.
  • FontForge habilitó Cairo de forma predeterminada para renderizar a mediados de octubre de 2008.
  • R puede generar gráficos en formatos PDF , PostScript y SVG utilizando Cairo si está disponible.
  • Gnuplot 4.4 ahora utiliza Cairo para renderizar salidas PDF y PNG . [21]
  • El navegador de Internet para PlayStation 3 utiliza Cairo desde la actualización del software del sistema 4.10.
  • Synfig 0.64 ahora admite la representación opcional de Cairo.
  • Representación gráfica a pedido de datos de series de tiempo en Graphite .
  • El motor de widgets Konfabulator/Yahoo utiliza Cairo para obtener una salida idéntica tanto para Win32 como para Quartz en Mac OS/X .
  • SolveSpace , software CAD 2D y 3D gratuito y de código abierto .

Historia

Keith Packard y Carl Worth fundaron el proyecto Cairo para su uso en el X Window System . [2] Originalmente (al menos hasta 2003) se llamaba Xr o Xr/Xc . El nombre se cambió para enfatizar la idea de una biblioteca multiplataforma para acceder al servidor de visualización , no vinculada al X Window System . [22] El nombre Cairo deriva del nombre original Xr , interpretado como las letras griegas chi y rho . [23]

Diseño de texto complejo

Cairo maneja fuentes basadas en latín y CJK, pero no admite directamente fuentes con diseño de texto complejo , que requieren dar forma a los glifos. Los desarrolladores de Cairo recomiendan usar Pango , que ofrece diseño de texto complejo y puede integrarse con Cairo. [24]

Véase también

Referencias

  1. ^ "Las aburridas páginas web de Carl". cworth.org . 2013 . Consultado el 11 de julio de 2014 .
  2. ^ ab "Xr: renderizado multidispositivo para gráficos vectoriales" . Consultado el 8 de junio de 2009 .
  3. ^ "cairo-1.18.2". www.https://www.cairographics.org . Consultado el 8 de septiembre de 2024 . {{cite web}}: Enlace externo en |website=( ayuda )
  4. ^ "Página de inicio de El Cairo" . Consultado el 30 de octubre de 2010 .
  5. ^ "Vínculos lingüísticos de El Cairo" . Consultado el 16 de abril de 2014 .
  6. ^ "SDL". El Cairo . 17 de febrero de 2009 . Consultado el 3 de noviembre de 2014 .
  7. ^ Chris Wilson (22 de julio de 2009). "Nuevo backend OpenGL fusionado" . Consultado el 12 de febrero de 2010 .
  8. ^ Øyvind Kolås (24 de enero de 2008). "Anuncio del backend de OpenVG" . Consultado el 12 de febrero de 2010 .
  9. Vladimir Vukićević (6 de mayo de 2008). "Bueno, ¿no es eso Qt?". Archivado desde el original el 9 de abril de 2010. Consultado el 12 de febrero de 2010 .
  10. ^ Chris Wilson (31 de agosto de 2009). «Cool Stuff» (Cosas interesantes) . Consultado el 12 de febrero de 2010 .
  11. ^ Bas Schouten (22 de noviembre de 2009). "Direct2D: procesamiento de hardware en un navegador" . Consultado el 12 de febrero de 2010 .
  12. ^ Larabel, Michael (27 de febrero de 2022). "La biblioteca de gráficos Cairo elimina muchos backends antiguos". Phoronix . Consultado el 5 de junio de 2022 .
  13. ^ "GNOME/librsvg". GitHub .
  14. ^ "GTK+ utilizará el motor vectorial Cairo" . Consultado el 27 de diciembre de 2009 .
  15. ^ "Detalles del paquete gtk-vector-screenshot en stretch". Debian .GitHub
  16. ^ "Mono - Dibujo" . Consultado el 27 de diciembre de 2009 .
  17. ^ "Notas a la luz de la luna" . Consultado el 27 de diciembre de 2009 .
  18. ^ "Hoja de ruta de Gecko 1.9" . Consultado el 27 de diciembre de 2009 .
  19. ^ "Notas de la versión 046". Wiki de Inkscape . Consultado el 31 de marzo de 2008 .
  20. ^ "Tutorial de ManimCE de TheoremOfBeethoven — Tutorial de ManimCE de la documentación de TB". zavden.github.io . Consultado el 29 de enero de 2023 .
  21. ^ "Anuncio de la versión 4.4.0 de Gnuplot". Página de inicio de Gnuplot . Archivado desde el original el 14 de mayo de 2011. Consultado el 22 de febrero de 2011 .
  22. ^ "Hilo de la lista de correo sobre el cambio de nombre de El Cairo". 15 de julio de 2003. Consultado el 8 de junio de 2009 .
  23. ^ "Hilo de la lista de correo sobre el cambio de nombre de El Cairo". 12 de julio de 2003. Consultado el 2 de diciembre de 2006 .
  24. ^ "¿Cómo uso Pango en lugar de la API de texto "toy" de Cairo?" . Consultado el 20 de marzo de 2024 .
  • Sitio web oficial
  • cairocffi en GitHub – Enlaces Cairo basados ​​en CFFI para Python
  • "Manual de referencia de la API de Cairo".
  • "El Cairo aquí, allí y en todas partes". Linux.Ars . Ars Technica . 23 de agosto de 2005.
  • "Gráficos multiplataforma con Cairo". IBM .
  • "Comparación de bibliotecas de imágenes PHP".
  • "El tutorial de gráficos de El Cairo".
Obtenido de "https://es.wikipedia.org/w/index.php?title=El_Cairo_(gráficos)&oldid=1247904740"