Interested Article - Cairo
- 2021-07-23
- 2
Cairo — это программная библиотека для отрисовки векторной графики с открытым исходным кодом . Включает в себя аппаратно-независимый прикладной программный интерфейс для разработчиков программного обеспечения. Cairo предоставляет графические примитивы для отрисовки двумерных изображений посредством разнообразных бекендов . Когда есть возможность, Cairo использует аппаратное ускорение .
Существует официальное предложение по стандартизации в языке C++ прикладного программного интерфейса отрисовки двумерной графики на основе библиотеки Cairo .
Программная архитектура
Привязки к языкам
Любая библиотека, написанная на одном языке программирования, может использоваться и на другом, если реализовано т. н. этой библиотеки к новому языку. Cairo имеет широкий диапазон привязок к разным языкам программирования: C++ , C# и другим языкам, отвечающим требованиям стандарта CLI . Также есть привязки Cairo к языкам Delphi , Factor , Haskell , Lua , Perl , PHP , Python , Ruby , Scheme , Smalltalk и другим .
Привязки к инструментам
Поскольку Cairo является лишь библиотекой для отрисовки, она способна принести ощутимую пользу при интеграции с инструментами построения графических пользовательских интерфейсов :
- FLTK имеет полноценную поддержку Cairo (при компиляции FLTK необходимо указать опцию «--enable-cairo»).
- GNUstep использует Cairo в качестве основного бекенда на не Windows-системах .
- GTK+ полностью поддерживает Cairo. Начиная с 2005 года с версии 2.8, GTK+ использует Cairo для отрисовки большинства графических управляющих элементов. Начиная с версии 3.0 GTK+ все элементы рисует через Cairo.
- Cairo способна напрямую обращаться к библиотеке SDL .
Доступные бекенды
Cairo оперирует с абстракцией surface (поверхность). Поверхность — это то, на чём рисует Cairo. За этой поверхностью могут скрываться разнообразные бекенды, которые могут передавать результат работы Cairo в X Window System , Xlib и XCB , Win32 GDI , OS X Quartz Compositor , BeOS , OS/2 , контексты OpenGL (напрямую и через glitz ), локальный буфер изображений, PNG -файлы, PDF , PostScript , DirectFB и SVG -файлы.
Существуют и другие бекенды, представляющие собой графический прикладной программный интерфейс: OpenVG , Qt , , и Direct2D .
Модель отрисовки
Модель отрисовки Cairo включает в себя три этапа:
- Сначала создаётся маска, которая состоит из векторных примитивов или форм. Например, круги, квадраты, кривые Безье , TrueType шрифты и т. д.
- Затем должен быть определён так называемый источник, который может быть цветом, цветовым градиентом , битовой картой или векторным изображением. Далее из окрашенных частей источника производится вырезание посредством заданной маски.
- Затем результат передаётся на поверхность, которую подхватывает соответствующий бекенд.
Такая модель отрисовки фундаментально отличается от подхода к построению изображений, принятому в SVG .
Пример
Довольно сложный графический вариант популярного « Привет, мир! » может быть реализован с помощью Cairo, к примеру, следующим образом:
#include <cairo-svg.h>
int main(int argc, char **argv) {
cairo_t *cr;
cairo_surface_t *surface;
cairo_pattern_t *pattern;
int x,y;
surface = (cairo_surface_t *)cairo_svg_surface_create("Cairo_example.svg", 110.0, 110.0);
cr = cairo_create(surface);
/* Рисуем квадратики на заднем фоне */
for (x=0; x<10; x++)
for (y=0; y<10; y++)
cairo_rectangle(cr, x*10.0, y*10.0, 5, 5);
pattern = cairo_pattern_create_radial(50, 50, 5, 50, 50, 50);
cairo_pattern_add_color_stop_rgb(pattern, 0, 0.75, 0.15, 0.99);
cairo_pattern_add_color_stop_rgb(pattern, 0.9, 1, 1, 1);
cairo_set_source(cr, pattern);
cairo_fill(cr);
/* Отрисовка переднего фона */
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, "Привет,");
cairo_move_to(cr, 10, 55);
cairo_show_text(cr, "Википедия!");
cairo_destroy (cr);
cairo_surface_destroy (surface);
return 0;
}
Использование
Cairo популярен в сообществе opensource, так как обеспечивает переносимость и качественную отрисовку двумерных изображений.
- GTK+ полностью поддерживает Cairo. Начиная с 2005 года с версии 2.8, GTK+ использует Cairo для отрисовки большинства графических управляющих элементов. Начиная с версии 3.0 GTK+ вообще всё рисует через Cairo.
- Проект Mono , включая , использует Cairo.
- Проект Mozilla задействует Cairo в браузерном движке Gecko . В Firefox 52 от него отошли в пользу Direct2D (Windows 10) и (более низкие), но он всё ещё поддерживается, если переключиться на него через расширенные настройки. Начиная с Firefox 66 поддержка удалена полностью .
- Фреймворк WebKit использует Cairo для рендеринга в GTK+ и -порты. Cairo-поддержка также добавлена для рендеринга SVG-графики и для содержимого тега <canvas>.
- Библиотека Poppler использует Cairo для ренедера PDF-документов. Cairo используется для построения сглаженных векторных графиков и прозрачных объектов.
- Векторный графический редактор Inkscape использует Cairo.
- Операционная система MorphOS 2.5 использует Cairo.
- Операционная система AmigaOS 4.1 поддерживает разделяемую объектную библиотеку Cairo (libcairo.so) в инсталляции по умолчанию.
- Редактор шрифтов FontForge по умолчанию использует Cairo с середины октября 2008 года.
- Язык программирования R способен выводить графику в PDF , PostScript и SVG форматы используя Cairo.
- Gnuplot 4.4 используется Cairo для рендеринга в PDF и PNG .
- Веб-обозреватель PlayStation 3 использует Cairo, начиная с системного обновления версии 4.10.
- Synfig 0.64 теперь опционально поддерживает рендеринг изображений через Cairo.
- Программа мониторинга и визуализации производительности компьютерной системы способна рендерить графики через Cairo.
- Платформа 1С:Предприятие 8.3 начиная с версии 8.3.16 использует Cairo для отрисовки .
История
Кит Паккард и Карл Ворт основали проект Cairo для использования в среде X Window System . Вначале (по крайней мере до 2003 года) проект назывался Xr или Xr/Xc . Название было изменено с той целью, чтобы подчеркнуть идею переносимости библиотеки с возможностью доступа к произвольному , не привязанному только лишь к X Window System .
Имя Cairo произошло от оригинального имени Xr , интерпретируемого буквами греческого алфавита χ and ρ .
См. также
Примечания
- — 2023.
- — 2006.
- ↑
- Michael B. McLaughlin; Herb Sutter, Jason Zink.: . Open Standards (3 июля 2014). Дата обращения: 12 сентября 2014. 12 сентября 2014 года.
- . Дата обращения: 16 апреля 2014. 17 мая 2011 года.
- Fedor, Adam (29 сентября 2011). Дата обращения: 3 ноября 2014. 26 марта 2014 года.
- (17 февраля 2009). Дата обращения: 3 ноября 2014. 2 октября 2014 года.
- Chris Wilson. (22 июля 2009). Дата обращения: 12 февраля 2010. 24 июля 2011 года.
- Øyvind Kolås. (24 января 2008). Дата обращения: 12 февраля 2010. 16 апреля 2009 года.
- Vladimir Vukićević. (6 мая 2008). Дата обращения: 12 февраля 2010. Архивировано из 9 апреля 2010 года.
- Chris Wilson. (31 августа 2009). Дата обращения: 12 февраля 2010. 24 июля 2011 года.
- Bas Schouten. (22 ноября 2009). Дата обращения: 12 февраля 2010. 10 февраля 2010 года.
- . Дата обращения: 27 декабря 2009. 2 января 2010 года.
- . Дата обращения: 27 декабря 2009. 2 января 2010 года.
- . Дата обращения: 27 декабря 2009. 25 июля 2008 года.
- . Дата обращения: 9 января 2019. 9 января 2019 года.
- . Gnuplot homepage . Дата обращения: 22 февраля 2011. Архивировано из 14 мая 2011 года.
- . dl03.1c.ru. Дата обращения: 9 ноября 2019. 9 ноября 2019 года.
- . Дата обращения: 8 июня 2009. 14 июня 2009 года.
- . Дата обращения: 8 июня 2009. 24 июля 2011 года.
- . Дата обращения: 2 декабря 2006. 25 июня 2013 года.
Ссылки на внешние источники
- — официальный сайт Cairo
- на сайте GitHub — CFFI-based Cairo bindings for Python
- .
- . Linux.Ars . Ars Technica .
- .
- .
- .
- 2021-07-23
- 2