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 el dibujo bidimensional en varios backends diferentes . Cairo utiliza aceleración de hardware [4] cuando está disponible.

Arquitectura de software

Enlaces de idiomas

Una biblioteca escrita en un lenguaje de programación se puede utilizar 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 , Harbor , 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 sólo una biblioteca de dibujos, puede resultar muy útil integrarla con un conjunto de herramientas de interfaz gráfica de usuario.

Backends disponibles

Cairo admite la salida (incluida la rasterización ) en varios back-ends diferentes , conocidos como "superficies" en su código. El soporte de back-end incluye salida al sistema X Window , a través de Xlib y XCB , Win32 GDI , OS X Quartz Compositor , BeOS API, OS/2 , contextos OpenGL (directamente [7] y mediante glitz), buffers de imágenes locales, Archivos PNG , PDF , PostScript , DirectFB y SVG .

Hay otros back-ends en desarrollo dirigidos a las API de gráficos OpenVG , [8] Qt , [9] Skia , [10] y Direct2D de Microsoft . [11] Los backends de BeOS, OS/2 y DirectFB se eliminaron 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 lleva a cabo 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 de Bézier , etc.
  2. Luego se debe definir la fuente, que puede ser un color, un degradado de color, un mapa de bits o algunos gráficos vectoriales, y a partir de las partes pintadas de esta fuente se hace un troquelado con la ayuda de la máscara definida anteriormente.
  3. Finalmente, el resultado se transfiere al destino o superficie, que proporciona el back-end para la salida.

Esto constituye un enfoque fundamentalmente diferente de los gráficos vectoriales escalables (SVG), que especifican el color de las formas con reglas de hojas de estilo en cascada (CSS). [ cita necesaria ] Mientras que Cairo crearía una máscara de una forma, luego crearía una fuente para ella y luego la 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 utilizan Cairo para trabajos pesados. [13]

Ejemplo

Imagen SVG generada por este ejemplo

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

#incluir <cairo-svg.h> #incluir <stdio.h> int principal ( int argc , char ** argv ) {      cairo_surface_t * superficie = cairo_svg_surface_create ( "Cairo_example.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_rectangle ( cr , x * 10.0 , y * 10.0 , 5 , 5 );         patrón_cairo_t * patrón = patrón_cairo_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_fill ( cr ); /* Escribiendo en primer plano */ cairo_set_font_size ( cr , 15 );   cairo_select_font_face ( cr , "Georgia" , CAIRO_FONT_SLANT_NORMAL , CAIRO_FONT_WEIGHT_BOLD );     cairo_set_source_rgb ( cr , 0 , 0 , 0 );     cairo_move_to ( cr , 10 , 25 );   cairo_show_text ( cr , "Hola" );  cairo_move_to ( cr , 10 , 75 );   cairo_show_text ( cr , "¡Wikipedia!" );  cairo_destroy ( 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 sistema X Window . [2] Originalmente (hasta al menos 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 sistema X Window . [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 de diseño de texto complejas , que requieren dar forma a los glifos. Los desarrolladores de Cairo recomiendan usar Pango , que proporciona un diseño de texto complejo y puede integrarse con Cairo. [24]

Ver 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 entre dispositivos para gráficos vectoriales" . Consultado el 8 de junio de 2009 .
  3. ^ "Lanzamiento de Cairo 1.18: primer lanzamiento estable en cinco años". www.phoronix.com . Consultado el 23 de septiembre de 2023 .
  4. ^ "Página de inicio de El Cairo" . Consultado el 30 de octubre de 2010 .
  5. ^ "Enlaces de idiomas de El Cairo" . Consultado el 16 de abril de 2014 .
  6. ^ "SDL". El Cairo . 2009-02-17 . 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). "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 de El Cairo elimina muchos backends antiguos". Forónix . Consultado el 5 de junio de 2022 .
  13. ^ "GNOME/librsvg". GitHub .
  14. ^ "GTK+ para utilizar el motor vectorial Cairo" . Consultado el 27 de diciembre de 2009 .
  15. ^ "Detalles del paquete gtk-vector-screenshot extendido". 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ón046". Wiki Inkscape . Consultado el 31 de marzo de 2008 .
  20. ^ "Tutorial de ManimCE por TheoremOfBeethoven - Tutorial de ManimCE por 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" juguete "de El Cairo?" . Consultado el 20 de marzo de 2024 .

enlaces externos