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 и несколько других, таких как Gambas (подобно Visual Basic). [5]

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

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

Доступные бэкэнды

Cairo поддерживает вывод (включая растеризацию ) на ряд различных бэкэндов , известных в его коде как «поверхности». Поддержка бэкэндов включает вывод в X Window System , как через 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] и Direct2D от Microsoft . [11] Бэкэнды BeOS, OS/2 и DirectFB были прекращены в 2022 году. [12]

Рисунок модели

Каирская модель рисунка

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

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

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

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

Пример

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

Изображение SVG, созданное в этом примере
#include <cairo-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 * 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 ( шаблон , 0.9 , 1 , 1 , 1 );     cairo_set_source ( cr , pattern );  cairo_fill ( cr ); /* Пишем на переднем плане */ 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 ( cr , 10 , 25 );   cairo_show_text ( cr , "Привет" );  cairo_move_to ( cr , 10 , 75 );   cairo_show_text ( cr , "Википедия!" );  cairo_destroy ( cr ); cairo_surface_destroy ( поверхность );}

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

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

История

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

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

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

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

Ссылки

  1. ^ "Скучные веб-страницы Карла". cworth.org . 2013. Получено 11 июля 2014 .
  2. ^ ab "Xr: Cross-device Rendering for Vector Graphics" . Получено 8 июня 2009 г. .
  3. ^ "cairo-1.18.2". www.cairographics.org . Получено 8 сентября 2024 г. .
  4. ^ "Cairo homepage" . Получено 30 октября 2010 г. .
  5. ^ "Cairo Language Bindings" . Получено 16 апреля 2014 г.
  6. ^ "SDL". Каир . 17 февраля 2009 г. Получено 3 ноября 2014 г.
  7. ^ Крис Уилсон (22 июля 2009 г.). "Новый бэкэнд OpenGL объединен" . Получено 12 февраля 2010 г.
  8. Ойвинд Колос (24 января 2008 г.). «Анонсируем бэкэнд OpenVG» . Проверено 12 февраля 2010 г.
  9. Владимир Вукичевич (6 мая 2008 г.). «Well Isn't That Qt». Архивировано из оригинала 9 апреля 2010 г. Получено 12 февраля 2010 г.
  10. Крис Уилсон (31 августа 2009 г.). "Cool Stuff" . Получено 12 февраля 2010 г.
  11. Бас Схоутен (22 ноября 2009 г.). «Direct2D: Аппаратный рендеринг браузера» . Проверено 12 февраля 2010 г.
  12. ^ Ларабель, Майкл (27 февраля 2022 г.). «Графическая библиотека Cairo отказывается от многих старых бэкендов». Phoronix . Получено 5 июня 2022 г. .
  13. ^ "GNOME/librsvg". GitHub .
  14. ^ "GTK+ будет использовать Cairo Vector Engine" . Получено 27 декабря 2009 г. .
  15. ^ "Подробности пакета gtk-vector-screenshot в stretch". Debian .GitHub
  16. ^ "Mono - Drawing" . Получено 27 декабря 2009 г. .
  17. ^ "Moonlight Notes" . Получено 27 декабря 2009 г. .
  18. ^ "Gecko 1.9 Roadmap" . Получено 27 декабря 2009 г. .
  19. ^ "ReleaseNotes046". Inkscape Wiki . Получено 31 марта 2008 г.
  20. ^ "Учебник ManimCE от TheoremOfBeethoven — Учебник ManimCE от TB documentation". zavden.github.io . Получено 29 января 2023 г. .
  21. ^ "Gnuplot version 4.4.0 announcement". Домашняя страница Gnuplot . Архивировано из оригинала 14 мая 2011 г. Получено 22 февраля 2011 г.
  22. ^ "Тред рассылки об изменении названия Каира". 15 июля 2003 г. Получено 8 июня 2009 г.
  23. ^ "Тред рассылки об изменении названия Каира". 12 июля 2003 г. Получено 2 декабря 2006 г.
  24. ^ «Как использовать Pango вместо API «игрушечного» текста Cairo?» . Получено 20 марта 2024 г. .

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