stringtranslate.com

Каир (графика)

Cairo (стилизовано под cairo ) — это графическая библиотека с открытым исходным кодом , которая предоставляет разработчикам программного обеспечения основанный на векторной графике аппаратно-независимый API . Он предоставляет примитивы для двумерного рисования на множестве различных серверных частей . Cairo использует аппаратное ускорение [4] , когда оно доступно.

Архитектура программного обеспечения

Языковые привязки

Библиотека, написанная на одном языке программирования, может использоваться на другом языке, если написаны привязки ; Cairo имеет ряд привязок для различных языков, включая C++ , C# и другие языки CLI , Delphi , Eiffel , Fortran , Factor , Harbour , Haskell , Julia , Lua , Perl , PHP , Python , Ruby , Rust , Scheme , Smalltalk и некоторые другие. например Гамбас (например, Visual Basic). [5]

Привязки инструментария

Поскольку Cairo — это всего лишь библиотека рисования, может быть весьма полезно интегрировать ее с набором инструментов графического интерфейса пользователя.

Доступные серверные части

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] Qt , [9] Skia , [10] и Microsoft Direct2D . [11] Серверные части BeOS, OS/2 и DirectFB были исключены в 2022 году. [12]

Чертеж модели

Модель чертежа Каира

Модель рисования Каира основана на трехслойной модели.

Любой процесс рисования происходит в три этапа:

  1. Сначала создается маска, которая включает в себя один или несколько векторных примитивов или форм, например, круги, квадраты, шрифты TrueType , кривые Безье и т. д.
  2. Затем необходимо определить источник, который может быть цветом, цветовым градиентом, растровым изображением или какой-либо векторной графикой, и из окрашенных частей этого источника делается высечка с помощью указанной выше маски.
  3. Наконец, результат передается в пункт назначения или на поверхность, которая предоставляется серверной частью для вывода.

Это принципиально отличается от подхода масштабируемой векторной графики (SVG), который определяет цвет фигур с помощью правил каскадных таблиц стилей (CSS). [ нужна цитация ] В то время как Cairo создавал бы маску формы, затем создавал для нее источник, а затем переносил их на поверхность, файл SVG просто определял бы форму с помощью атрибута style. Тем не менее, модели не являются несовместимыми; многие средства визуализации SVG используют Cairo для тяжелой работы. [13]

Пример

Изображение SVG, созданное по этому примеру

Достаточно сложную графику « Hello world » можно нарисовать с помощью Cairo всего лишь с помощью нескольких строк исходного кода :

#include <каир-svg.h> #include <stdio.h> int main ( int argc , char ** argv ) {      cairo_surface_t * поверхность = cairo_svg_surface_create ( «Cairo_example.svg» , 100.0 , 100.0 );      cairo_t * cr = cairo_create ( поверхность );    /* Рисуем квадраты на заднем плане */ для ( int x = 0 ; x < 10 ; ++ x )         для ( int y = 0 ; y < 10 ; ++ y )         cairo_rectangle ( cr , x * 10,0 , y * 10,0 , 5 , 5 );         cairo_pattern_t * шаблон = cairo_pattern_create_radial ( 50 , 50 , 5 , 50 , 50 , 50 );         cairo_pattern_add_color_stop_rgb ( шаблон , 0 , 0,75 , 0,15 , 0,99 );     cairo_pattern_add_color_stop_rgb ( шаблон , 0,9 , 1 , 1 , 1 );     cairo_set_source ( cr , шаблон );  cairo_fill ( кр ); /* Пишем на переднем плане */ cairo_set_font_size ( cr , 15 );   cairo_select_font_face ( cr , «Грузия» , CAIRO_FONT_SLANT_NORMAL , CAIRO_FONT_WEIGHT_BOLD );     cairo_set_source_rgb ( cr , 0 , 0 , 0 );     cairo_move_to ( кр , 10 , 25 );   cairo_show_text ( cr , «Привет» );  cairo_move_to ( кр , 10 , 75 );   cairo_show_text ( cr , «Википедия!» );  cairo_destroy ( кр ); cairo_surface_destroy ( поверхность );}

Заметное использование

Cairo популярен в сообществе разработчиков программного обеспечения с открытым исходным кодом благодаря обеспечению кроссплатформенной поддержки расширенных возможностей 2D-рисования.

История

Кит Паккард и Карл Уорт основали проект Cairo для использования в системе X Window . [2] Первоначально (по крайней мере, до 2003 года) он назывался Xr или Xr/Xc . Название было изменено, чтобы подчеркнуть идею кроссплатформенной библиотеки для доступа к серверу отображения , не привязанной к X Window System . [22] Название Каир происходит от первоначального имени Xr , интерпретируемого как греческие буквы хи и ро . [23]

Сложная верстка текста

Cairo поддерживает шрифты на основе латиницы и CJK, но не поддерживает шрифты со сложной компоновкой текста , требующие формирования глифов. [24]

Смотрите также

Рекомендации

  1. ^ «Скучные веб-страницы Карла» . cworth.org . 2013 . Проверено 11 июля 2014 г.
  2. ^ ab «Xr: кросс-девайсный рендеринг векторной графики» . Проверено 8 июня 2009 г.
  3. ^ «Выпущен Cairo 1.18 — первая стабильная версия за пять лет» . www.phoronix.com . Проверено 23 сентября 2023 г.
  4. ^ "Домашняя страница Каира" . Проверено 30 октября 2010 г.
  5. ^ "Привязки Каирского языка" . Проверено 16 апреля 2014 г.
  6. Ссылки _ Каир . 17 февраля 2009 г. Проверено 3 ноября 2014 г.
  7. ^ Крис Уилсон (22 июля 2009 г.). «Объединен новый бэкэнд OpenGL» . Проверено 12 февраля 2010 г.
  8. ^ Ойвинд Колос (24 января 2008 г.). «Анонсируем бэкэнд OpenVG» . Проверено 12 февраля 2010 г.
  9. ^ Владимир Вукичевич (6 мая 2008 г.). «Ну, разве это не Qt». Архивировано из оригинала 9 апреля 2010 г. Проверено 12 февраля 2010 г.
  10. ^ Крис Уилсон (31 августа 2009 г.). "Классная вещь" . Проверено 12 февраля 2010 г.
  11. ^ Бас Схоутен (22 ноября 2009 г.). «Direct2D: Аппаратный рендеринг браузера» . Проверено 12 февраля 2010 г.
  12. ^ Ларабель, Майкл (27 февраля 2022 г.). «Графическая библиотека Cairo удаляет множество старых бэкэндов». Фороникс . Проверено 5 июня 2022 г.
  13. ^ "GNOME/librsvg". Гитхаб .
  14. ^ «GTK+ для использования векторного движка Cairo» . Проверено 27 декабря 2009 г.
  15. ^ "Подробная информация о пакете gtk-vector-screenshot в растянутом виде" . Дебиан .GitHub
  16. ^ "Моно - Рисунок" . Проверено 27 декабря 2009 г.
  17. ^ "Лунные заметки" . Проверено 27 декабря 2009 г.
  18. ^ «Дорожная карта Gecko 1.9» . Проверено 27 декабря 2009 г.
  19. ^ "ReleaseNotes046" . Инкскейп вики . Проверено 31 марта 2008 г.
  20. ^ «Учебное пособие по ManimCE от теоремыБетховена — Учебное пособие по ManimCE от документации TB» . zavden.github.io . Проверено 29 января 2023 г.
  21. ^ «Анонс Gnuplot версии 4.4.0» . Домашняя страница Gnuplot . Архивировано из оригинала 14 мая 2011 г. Проверено 22 февраля 2011 г.
  22. ^ «Ветка списка рассылки об изменении названия Каира» . 15 июля 2003 года . Проверено 8 июня 2009 г.
  23. ^ «Ветка списка рассылки об изменении названия Каира» . 12 июля 2003 года . Проверено 2 декабря 2006 г.
  24. ^ «Текст». Прочтите документацию . Проверено 11 марта 2022 г.

Внешние ссылки