stringtranslate.com

El Cairo (gráficos)

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.

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.

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 .

Enlaces externos