Каир (графика)
Оригинальный автор(ы) | Кит Паккард , Карл Уорт [1] |
---|---|
Разработчик(и) | Карл Уорт, Бехдад Исфабод |
Первоначальный выпуск | До 2003 года [2] |
Стабильная версия | |
Репозиторий | gitlab |
Написано в | С |
Тип | Графическая библиотека |
Лицензия | GNU Lesser General Public License версии 2.1 (только) или Mozilla Public License 1.1. |
Веб-сайт | www |
Cairo (стилизовано под cairo ) — это с открытым исходным кодом графическая библиотека , которая предоставляет основанный на векторной графике аппаратно-независимый API разработчикам программного обеспечения . Он предоставляет примитивы для двумерного рисования на различных серверах . Каир использует аппаратное ускорение [4] когда доступно.
Архитектура программного обеспечения
[ редактировать ]Языковые привязки
[ редактировать ]Библиотека, написанная на одном языке программирования, может использоваться на другом языке, если привязки написаны ; Cairo имеет ряд привязок для различных языков, включая C++ , C# и другие языки CLI , Delphi , Eiffel , Fortran , Factor , Harbour , Haskell , Julia , Lua , Perl , PHP , Python , Ruby , Rust , Scheme , Smalltalk и некоторые другие. например Гамбас (например, Visual Basic). [5]
Привязки инструментария
[ редактировать ]Поскольку Cairo — это всего лишь библиотека рисования, может быть весьма полезно интегрировать ее с набором инструментов графического интерфейса пользователя.
- FLTK имеет полную поддержку в Каире (через
--enable-cairo
компилировать переключатель). - GTK начал в 2005 году с версии 2.8 использовать Cairo для рендеринга большинства элементов графического управления , а начиная с версии 3.0 весь рендеринг осуществляется через Cairo.
- Команда разработчиков Cairo поддерживает актуальные инструкции по рендерингу поверхностей в SDL . [6]
Доступные серверные части
[ редактировать ]Cairo поддерживает вывод (включая растеризацию ) на несколько различных серверных частей , известных в своем коде как «поверхности». Внутренняя поддержка включает вывод в систему X Window через Xlib и XCB , Win32 GDI , OS X Quartz Compositor , BeOS API, OS/2 , OpenGL (напрямую). контексты [7] и через glitz), локальные буферы изображений, файлы PNG , PDF , PostScript , DirectFB и SVG файлы .
В разработке находятся и другие серверные части, ориентированные на графические API OpenVG . [8] Кт , [9] катание на лыжах , [10] и Direct2D от Microsoft . [11] Серверные части BeOS, OS/2 и DirectFB были исключены в 2022 году. [12]
Чертеж модели
[ редактировать ]Модель рисования Каира основана на трехслойной модели.
Любой процесс рисования происходит в три этапа:
- Сначала создается маска, которая включает в себя один или несколько векторных примитивов или форм, например, круги, квадраты, TrueType шрифты , кривые Безье и т. д.
- Затем необходимо определить источник, который может быть цветом, цветовым градиентом, растровым изображением или какой-либо векторной графикой, и из окрашенных частей этого источника делается высечка с помощью определенной выше маски.
- Наконец, результат передается в пункт назначения или на поверхность, которая предоставляется серверной частью для вывода.
Это принципиально отличается от подхода масштабируемой векторной графики (SVG), который определяет цвет фигур с помощью правил каскадных таблиц стилей (CSS). [ нужна ссылка ] В то время как Cairo создавал бы маску фигуры, затем создавал бы для нее источник, а затем переносил их на поверхность, файл SVG просто определял бы форму с помощью style
атрибут. Тем не менее, модели не являются несовместимыми; многие средства визуализации SVG используют Cairo для тяжелой работы. [13]
Пример
[ редактировать ]Достаточно сложную графику « Hello world » можно нарисовать с помощью Cairo всего лишь с помощью нескольких строк исходного кода :
#include <cairo-svg.h>
#include <stdio.h>
int main(int argc, char **argv) {
cairo_surface_t *surface = cairo_svg_surface_create("Cairo_example.svg", 100.0, 100.0);
cairo_t *cr = cairo_create(surface);
/* Draw the squares in the background */
for (int x = 0; x < 10; ++x)
for (int y = 0; y < 10; ++y)
cairo_rectangle(cr, x * 10.0, y * 10.0, 5, 5);
cairo_pattern_t *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);
/* Writing in the foreground */
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, "Hallo");
cairo_move_to(cr, 10, 75);
cairo_show_text(cr, "Wikipedia!");
cairo_destroy(cr);
cairo_surface_destroy(surface);
}
Заметное использование
[ редактировать ]Cairo популярен в сообществе разработчиков программного обеспечения с открытым исходным кодом, поскольку обеспечивает кроссплатформенную поддержку расширенных возможностей 2D-рисования.
- GTK , начиная с 2005 года с версии 2.8, использует Cairo для рендеринга большинства своих графических элементов управления . [14] Начиная с версии GTK 3, весь рендеринг выполняется с использованием Cairo.
- Программа под названием gtk-vector-screenshot, найденный в Debian, позволяет делать векторные снимки экрана (SVG, PDF или PostScript) приложений GTK 3. [15]
- Проект «Моно» , [16] включая лунный свет , [17] с самого начала использовал Cairo для поддержки серверных частей своих GDI+ (libgdiplus) и System.Drawing пространств имен .
- Проект Mozilla использовал Cairo в своем механизме компоновки Gecko , используемом для рендеринга графического вывода продуктов Mozilla. Gecko 1.8, механизм компоновки для Mozilla Firefox 2.0 и SeaMonkey 1.0, использовал Cairo для рендеринга содержимого SVG и <canvas> . Геккон 1,9, [18] выпуск Gecko, который служит основой Firefox 3 , использует Cairo в качестве графической части для рендеринга как содержимого веб-страницы, так и пользовательского интерфейса (или «хрома»).
- Платформа WebKit использует Cairo для всего рендеринга в портах GTK и EFL . Также была добавлена поддержка содержимого SVG и <canvas> с использованием Cairo.
- Библиотека Poppler использует Cairo для рендеринга PDF-документов. Cairo позволяет рисовать векторную графику со сглаживанием и прозрачные объекты.
- Приложение векторной графики Inkscape использует библиотеку Cairo для отображения в контурном режиме, а также для экспорта в PDF и PostScript , начиная с версии 0.46. [19]
- Первоначальная версия Manim , называемая ManimCairo, представляет собой движок математической анимации, используемый в анимации видео 3Blue1Brown на YouTube. С тех пор Маним перешел на использование OpenGL . Эта версия называется ManimGL. [20]
- MorphOS 2.5 включает реализацию Cairo с общей библиотекой, которая была доступна как отдельная версия для более ранних версий MorphOS.
- AmigaOS 4.1 поддерживает библиотеку общих объектов Cairo (libcairo.so) при установке по умолчанию.
- FontForge по умолчанию включил Cairo для рендеринга в середине октября 2008 года.
- R может выводить графики в форматах PDF , PostScript и SVG, используя Cairo, если он доступен.
- Gnuplot 4.4 теперь использует Cairo для рендеринга PDF и PNG . [21]
- Интернет-браузер для PlayStation 3 использует Cairo начиная с обновления системного программного обеспечения 4.10.
- Synfig 0.64 теперь поддерживает дополнительный рендеринг Cairo.
- Построение графиков данных временных рядов по требованию в Graphite .
- Движок виджетов Konfabulator/Yahoo использует Cairo для вывода, идентичного Win32 и Quartz в Mac OS/X .
- SolveSpace , бесплатное программное обеспечение 2D и 3D CAD с открытым исходным кодом .
История
[ редактировать ]Кит Паккард и Карл Уорт основали проект Cairo для использования в системе X Window . [2] Первоначально (по крайней мере, до 2003 года) он назывался Xr или Xr/Xc . Название было изменено, чтобы подчеркнуть идею кроссплатформенной библиотеки для доступа к серверу отображения , не привязанной к X Window System . [22] Название Каир происходит от первоначального названия Xr , интерпретируемого как греческие буквы хи и ро . [23]
Сложная верстка текста
[ редактировать ]Cairo поддерживает шрифты на основе латиницы и CJK, но не поддерживает напрямую шрифты со сложной компоновкой текста , требующие формирования глифов. Разработчики Cairo рекомендуют использовать Pango , который обеспечивает сложную верстку текста и может интегрироваться с Cairo. [24]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Скучные веб-страницы Карла» . cworth.org . 2013 . Проверено 11 июля 2014 г.
- ^ Jump up to: а б «Xr: кросс-девайсный рендеринг векторной графики» . Проверено 8 июня 2009 г.
- ^ «Выпущен Cairo 1.18 — первая стабильная версия за пять лет» . www.phoronix.com . Проверено 23 сентября 2023 г.
- ^ «Домашняя страница Каира» . Проверено 30 октября 2010 г.
- ^ «Каирские языковые привязки» . Проверено 16 апреля 2014 г.
- ^ «СДЛ» . Каир . 17 февраля 2009 г. Проверено 3 ноября 2014 г.
- ^ Крис Уилсон (22 июля 2009 г.). «Объединен новый бэкэнд OpenGL» . Проверено 12 февраля 2010 г.
- ^ Ойвинд Колос (24 января 2008 г.). «Анонсируем бэкэнд OpenVG» . Проверено 12 февраля 2010 г.
- ^ Владимир Вукичевич (06 мая 2008 г.). «Ну, разве это не Qt» . Архивировано из оригинала 9 апреля 2010 г. Проверено 12 февраля 2010 г.
- ^ Крис Уилсон (31 августа 2009 г.). «Классная штука» . Проверено 12 февраля 2010 г.
- ^ Бас Схоутен (22 ноября 2009 г.). «Direct2D: Аппаратный рендеринг браузера» . Проверено 12 февраля 2010 г.
- ^ Ларабель, Майкл (27 февраля 2022 г.). «Графическая библиотека Cairo удаляет множество старых бэкэндов» . Фороникс . Проверено 5 июня 2022 г.
- ^ «ГНОМ/librsvg» . Гитхаб .
- ^ «GTK+ для использования векторного движка Cairo» . Проверено 27 декабря 2009 г.
- ^ «Подробная информация о пакете gtk-vector-screenshot в растянутом виде» . Дебиан . GitHub
- ^ «Моно-рисование» . Проверено 27 декабря 2009 г.
- ^ «Лунные заметки» . Проверено 27 декабря 2009 г.
- ^ «Дорожная карта Gecko 1.9» . Проверено 27 декабря 2009 г.
- ^ «Примечания к выпуску046» . Инкскейп вики . Проверено 31 марта 2008 г.
- ^ «Учебное пособие по ManimCE от теоремыБетховена — Учебное пособие по ManimCE от документации TB» . zavden.github.io . Проверено 29 января 2023 г.
- ^ «Анонс Gnuplot версии 4.4.0» . Домашняя страница Gnuplot . Архивировано из оригинала 14 мая 2011 г. Проверено 22 февраля 2011 г.
- ^ «Ветка списка рассылки об изменении названия Каира» . 15 июля 2003 года . Проверено 8 июня 2009 г.
- ^ «Ветка списка рассылки об изменении названия Каира» . 12 июля 2003 года . Проверено 2 декабря 2006 г.
- ^ «Как мне использовать Pango вместо «игрушечного» текстового API Cairo?» . Проверено 20 марта 2024 г.
Внешние ссылки
[ редактировать ]- Официальный сайт
- cairocffi на GitHub — привязки Cairo на основе CFFI для Python
- «Справочное руководство по Cairo API» .
- «Каир здесь, там и везде» . Линукс.Арс . Арс Техника . 23 августа 2005 г.
- «Кроссплатформенная графика с Каиром» . ИБМ .
- «Сравнение библиотек изображений PHP» .
- «Урок Каирской графики» .