Новости

Кроссплатформенная графіка з використанням cairo

  1. Переваги використання cairo
  2. Порівняння векторного і растрового методу виведення зображень
  3. Для чого потрібна нова графічна модель?
  4. Цільові формати cairo
  5. застосування cairo
  6. Концепція малювання в cairo
  7. Термінологія cairo
  8. Приклад програми на cairo
  9. Малюнок 1. Логотип IBM, створений за допомогою cairo
  10. Система версій cairo
  11. Ресурси для скачування

Бібліотека векторної графіки для забезпечення узгодженого виведення зображень

Переваги використання cairo

Бібліотека Cairo - це вільне програмне забезпечення для роботи з векторною графікою, що підтримує безліч вихідних форматів. Cairo може використовуватися на великій кількості платформ, таких як Linux, BSD, Microsoft® Windows® і OS X (також розробляються версії для BeOS та OS2). Висновок зображень в Linux може виконуватися за допомогою системи X Window, Quartz, в форматі буфера зображення або в контексті OpenGL. Крім того, cairo дозволяє формувати графічне зображення в PostScript або PDF для високоякісного друку. В ідеалі користувачі cairo повинні отримувати при друку зображення, практично ідентичні зображенням на моніторі.

У цій статті розповідається про те, що таке бібліотека cairo і чим вона може бути корисна при розробці додатків. Приклад, наведений у цій статті, створює зображення логотипу IBM в форматах pdf, ps, png, svg і в вікні gtk.

При проектуванні cairo істотне увага приділялася тому, щоб реалізувати підтримку ідентичного виведення настільки, наскільки це взагалі можливо. Така узгодженість виведення зображення дуже добре підходить для програмування засобів розробки графічного інтерфейсу користувача і розробки кроссплатформенних додатків. Можливість застосування однієї і тієї ж бібліотеки для друку зображення з екрану з високою роздільною здатністю і малювання має очевидні переваги.

Крім того, на кожній підтримуваної платформі cairo намагається інтелектуально використовувати апаратне і програмне забезпечення. Поєднання високоякісної векторної графіки і високої продуктивності робить cairo однією з найбільш ефективних сучасних графічних систем для UNIX®.

Cairo написана на мові програмування C, але має прив'язки до більшості інших поширених мов. Можливості обраного для розробки мови C сприяють створенню нових прив'язок, одночасно забезпечуючи високу продуктивність при запуску на рідній платформі. Також заслуговує на особливу згадку прив'язка до мови Python, яка робить можливим швидке створення прототипів, а також знижує поріг необхідних знань для тих, хто вивчає API малювання в cairo.

Порівняння векторного і растрового методу виведення зображень

Cairo є графічною бібліотекою для роботи з векторною графікою, тобто малювання здійснюється за допомогою алгебраїчних описів малюнка, а не за допомогою послідовності заповнених пікселів растрового зображення. У растровому малюнку послідовність пікселів заповнюється певними значеннями кольору в певному розташуванні; при цьому якість малюнка пропорційно розміру растрового зображення.

Зображення, намальоване за допомогою растрового методу, втрачає якість і чіткість при збільшенні. Часто зображення виглядають нечіткими або розмитими, подібно до того, як виглядає зблизька зображення на екрані проектора або великого телевізора. На відстані зображення може виглядати ясним, але при його наближенні можна побачити набір окремих точок. Така втрата якості неминуча, оскільки ніяк не можна визначити, що саме повинно знаходитися між заздалегідь визначеними пікселями.

Комп'ютерні системи та архітектури малювання існують вже давно, і cairo запозичила багато з ранніх моделей PostScript і PDF. Cairo моделює підхід PostScript і Portable Document Format (PDF) в тому, що всі вони використовують математичні вирази для створення зображень. Алгебраїчне опис зображення дозволяє в будь-який час відтворити все зображення або його частину, обчисливши математичні вирази в необхідної області. Алгебраїчне опис зображення виражається в термінах точок, кривих і прямих ліній (в тому числі векторів, що і дало назву системам векторної графіки).

Оскільки математичний вираз можна обчислювати заново при перемальовуванні зображень або його частин, то не відбувається втрат в роздільної здатності при збільшенні, масштабування або перетворенні зображень. Однак у векторного підходу є і свої обмеження. Наприклад, в деяких випадках масштабування векторного зображення при надзвичайно великому (настільки великому, що більшості користувачів воно ніколи не потрібно) збільшенні може викликати появу артефактів. При великому збільшенні деякі лінії можуть бути намальовані невірно через похибки в обчисленнях. При зменшенні деякі лінії можуть стати невидимими або слаборазлічіми.

Додатковою перевагою векторної природи cairo є те, що векторні зображення, як правило, невеликі за розміром. Це відбувається тому, що відносно велика кількість інформації можна закодувати у відносно невеликому рівнянні. Гідність векторного зображення полягає і у відносній простоті. Тягар фактичного перетворення точок, прямих і пов'язаних з ними рівнянь в ціле зображення покладено на графічну бібліотеку.

Рівняння, що описують криві векторних зображень, відомі як Криві Безьє - лінії, названі на честь математика П'єра Безьє. Крива Безьє складається принаймні з двох якірних крапок і ще однієї або більше додаткових точок між ними, званих мітками-маніпуляторами. Переміщаючи мітку-маніпулятор, можна змінювати форму кривої. Кожен, хто коли-небудь користувався програмами Photoshop або GIMP, знає, про що йде мова. Однак остаточний формат збереженого малюнка при використанні цих програм може бути растровим! Залежно від формату вихідного файлу в ньому буде збережена інформація про контурі Безьє або цей контур буде перетворений в растрове зображення і збережений в растровому вигляді.

На момент написання цієї статті cairo має прив'язки до мов програмування C ++, Ruby, Perl, Java ™, .Net / mono і іншим. Різні прив'язки знаходяться на різних стадіях розвитку, докладніше про це можна дізнатися на домашній сторінці проекту cairo (посилання в розділі ресурси ). На даний момент частіше і ширше всього в співтоваристві вільного програмного забезпечення використовуються прив'язки до Python і C ++.

Як вже говорилося раніше, ряд графічних інструментів надає прив'язки, які ще більше спрощують розробку на cairo. Версії Gtk + після 2.8 повністю підтримують cairo, при цьому cairo була обрана основною графічною системою для підтримки майбутніми версіями GTK. Крім того, починається реалізація підтримки cairo для виведення графіки в таких графічних інструментах, як GNUstep і FLTK.

Cairo чудово підходить в якості API для малювання при розробці кроссплатформенних додатків, що вимагають низкоуровневого контролю за операціями малювання і створення складених зображень. Для реалізації кроссплатформенних додатків, що не зачіпають низькорівневі графічні засоби, може бути доцільно використовувати інші зручні графічні бібліотеки, що працюють поверх cairo.

Для чого потрібна нова графічна модель?

Відверто кажучи, на мій погляд, існуючі системи з відкритим вихідним кодом мають ряд суттєвих недоліків. Бібліотека xprint, маючи переваги єдиного API екрану і друку, розрахована, в основному, на запуск у вигляді окремого серверного процесу і має поганий набір API. У libgnomeprint є роздільні моделі друку і створення зображень, але поділ API друку і створення зображень призводить до відмінностей в зображеннях, що виводяться на екран і на друк.

Розробники бібліотеки cairo врахували досвід своїх попередників і з самого початку проектування розробляли єдиний API.

Цільові формати cairo

Cairo може надавати графіку в наступних вихідних форматах:

  • X Window System (з використанням розширення Render, якщо воно є)
  • OpenGL (з використанням glitz)
  • Зображення в оперативній пам'яті (піксельні буфери тощо)
  • PostScript (підходить для друку)
  • Файли PDF (Portable Document Format)
  • SVG (масштабована векторна графіка)

Не всі вихідні формати зображення рівноправні. Хоча cairo і прагне створити ідентичні зображення на виході різних інтерфейсів, у кожного з них є власні переваги. Наприклад, вихідний буфер формату PDF використовує векторну графіку всюди, де це можливо (використовуючи зображення тільки тоді, коли це обов'язково), тоді як інтерфейс PostScript генерує одне велике зображення на сторінку.

Модель рендеринга, представлена ​​в cairo, створена під впливом багатьох дотеперішніх технологій. Cairo має поняття контурів, ліній і заливки, запозичені з PostScript, а реалізацію Porter-Duff-комбінування зображень - з формату PDF і розширень для формування зображення в сучасних реалізаціях X Server. Крім того, в cairo підтримуються відсікання, маски і градієнти.

застосування cairo

Дуже багато впливових відкриті проекти вже перейшли на використання cairo, і сьогодні cairo є найбільшим гравцем в галузі графіки для Linux. Ось деякі з найбільш популярних проектів, які вже використовують cairo:

  • Gtk + - всіма улюблений багатоплатформовий графічний інструментарій
  • Pango - вільна бібліотека для верстки і рендеринга тексту, з акцентом на інтернаціоналізацію
  • Gnome - вільна графічне середовище робочого столу
  • Mozilla - кроссплатформенная інфраструктура Web-браузера, на якій базується Firefox
  • OpenOffice.org - вільний набір офісних додатків, який можна порівняти за функціональністю з Microsoft Office

Концепція малювання в cairo

При малюванні в cairo найпростіші операції виглядають так: вибір полотна, підбір кисті, кольору, розміщення лінії і лише після цього фактично малюється лінія. Автори cairo використовують в описах програми аналогію з живописцем, і я буду слідувати їй.

Зазвичай перше, що робить художник - вибирає, на чому малювати. У фізичному світі художник може використовувати папір, тканину або навіть стіну. При використанні cairo також необхідно вибрати порожній носій. Для малювання потрібно створити контекст cairo, який є основним об'єктом. З цього контексту можна вибрати цільову поверхню, таку як файл PostScript, документ формату PDF або екранне зображення. Тим самим програміст вибирає, на чому збирається малювати зображення.

Наступне завдання живописця - вибір кисті. Живописець може проводити багато часу за вибором кистей за розміром і товщині. У cairo також є поняття типу кисті, виражене через ширину лінії. Різні розміри кисті дають лінії різної товщини.

Тепер, на відміну від художника, що малює в реальному світі, користувачеві cairo необхідно визначитися з точними координатами. Художнику досить доторкнутися пензлем до паперу, але комп'ютера треба знати координати x і y, щоб знати, де помістити цифрову "фарбу".

Після того як ми повідомили cairo про кисті і становище, з якого починається малювання, потрібно уявити, як буде виглядати лінія. Прості малюнки можуть складатися з відрізків прямих, але можна (подібно справжньому художнику) малювати криві і дуги.

Нарешті, необхідно визначитися, де лінія повинна закінчитися. Це знову робиться за допомогою завдання пари координат (x, y).

Додатково може знадобитися "розфарбувати" намальовані об'єкти. У термінології cairo це називається заповненням. Для кожної з операцій, описаних вище, в cairo є безпосередня реалізація API. Деякі з цих API будуть описані нижче.

Ці прості операції дозволяють створювати дуже складну графіку. Cairo дозволяє зробити навіть те, чого не можуть живописці - наприклад, перетворити зображення, збільшивши або перемістивши малюнок кудись в інше місце на віртуальній папері.

Хоча GIMP або Photoshop дозволяють виконувати багато з цих же дій, необхідно пам'ятати, що cairo є абсолютно іншим інструментом: cairo - це програмний засіб малювання. GIMP і Photoshop використовують інструменти, подібні cairo, "за лаштунками" для реалізації малювання. При малюванні за допомогою цих інструментів користувач автоматично задає за допомогою миші координатні точки і тип інструменту, наприклад, рамку, і вибирає перо і стиль лінії через графічний інтерфейс. Як можна побачити в коді прикладу (див. Розділ Завантаження ), Cairo вимагає більш явного взаємодії виду "з шириною лінії 1 провести дугу радіуса 10 навколо центральної точки в положенні z".

Термінологія cairo

Обговорюючи будь-які технології, важливо використовувати правильну термінологію. Термінологія API в cairo ділиться на три категорії: основні терміни малювання, терміни поверхонь і терміни, пов'язані зі шрифтами (додаткову інформацію можна знайти за посиланнями в розділі ресурси ).

Перш за все в cairo є контекст малювання, відповідний рухам кисті художника по полотну, якщо слідувати вищенаведеної аналогії. Контекст має тип cairo_t і необхідний для виведення зображення. Типовими діями, виконуваними над контекстом, є малювання форм Безьє, ліній і кривих. Послідовність таких криволінійних фігур і пов'язаних з ними даних в Cairo називається контуром. Ці контури можуть бути намальовані, а потім заштриховані або залиті.

Координати перетворюються в контури за допомогою дуже простого API. Цей API хороший тим, що він звільняє від необхідності думати про складні матрицях перетворень, зазвичай обговорюваних в лінійної алгебри та на курсах і в підручниках графіки. Операції малювання, реалізовані в cairo, можуть бути піддані будь-яким афінних перетворень. Ці перетворення дають інструментальні засоби для зсуву, масштабування і обертання малюнка або його частин. Кожен контур малюється по визначальних крапок. Таким чином, cairo відображає зображення, з'єднуючи задані точки. Приклад цього ми побачимо пізніше.

Тепер розповімо про різні типи поверхонь в cairo. У cairo існує кілька видів поверхонь, прив'язаних до цільового формату виведення для даного малюнка. Поверхня в cairo - це те, на чому створюється малюнок. Зокрема, є поверхні для зображень (в буфері в оперативній пам'яті), для OpenGL (через поверхню glitz), для PDF і PostScript поверхні - для виведення документів, для переносних залежного малювання - через Win32 і XLib. Кожна з цих поверхонь виводиться з основного типу поверхні - cairo_surface_t.

Шаблоном в cairo називається те, з чого можна читати, що використовується як джерело або маска операції малювання. Шаблони в cairo можуть бути суцільними, заснованими на поверхнях і навіть градієнтними.

До сих пір ми обговорювали тільки проведення контурів. Але прості контури дозволяють отримати лише досить нецікаві малюнки, що складаються з ліній. Фактично, просте проведення ліній - тільки одна з п'яти основних операцій малювання в cairo. Ось ці п'ять операцій:

  • cairo_stroke
  • cairo_fill
  • cairo_show_text / cairo_show_glyphs
  • cairo_paint
  • cairo_mask

Хоча просте малювання ліній може бути зручним, воно недостатньо виразно для малювання досить складних об'єктів - наприклад, шрифтів. У cairo є базовий клас для шрифтів, названий cairo_font_face_t. Cairo розуміє масштабовані шрифти, які містять кешированниє метрики для конкретних розмірів шрифтів. До того ж підтримується ряд опцій шрифту, розпорядчих, як даний шрифт повинен відображатися. Зазвичай в cairo використовуються шрифти Freetype на UNIX і Win32 на платформах Windows.

Приклад програми на cairo

Я написав за допомогою cairo код, який зображає логотип IBM. Код можна завантажити з розділу завантаження . При виконанні цього коду на екран виводиться наступне:

Малюнок 1. Логотип IBM, створений за допомогою cairo
Бібліотека векторної графіки для забезпечення узгодженого виведення зображень   Переваги використання cairo   Бібліотека Cairo - це вільне програмне забезпечення для роботи з векторною графікою, що підтримує безліч вихідних форматів

У коді особливу увагу потрібно звернути на рядок cairo_stroke (cr), яка з'являється після того, як були намальовані букви, але перш, ніж додається значок зареєстрованого товарного знака. Cairo не буде нічого малювати без вказівки стилю лінії, і випадкове невключення стилю є типовою помилкою новачків.

Система версій cairo

Випускаються версії cairo нумеруються так само, як і ядра Linux: випуски з непарним номером - це експериментальні версії для розробки, які не підходять для людей «зі слабкими нервами» і виробничих систем. Код парних випусків ретельно полірується: у випуску 1.0 особливу увагу було зосереджено на тому, щоб надати API для користувачів і виводити високоякісні зображення. API версії 1.2 був зосереджений на завершення ряду менш розроблених інтерфейсів, в той час як в поточній серії 1.4 зроблено багато щодо оптимізації і додаванню нових функціональних можливостей.

Розробники cairo надають хороші фрагменти коду, що демонструють використання різних наборів API cairo (докладніше див. Посилання на приклади в розділі ресурси ). Так що не варто чекати наступної версії cairo - можна завантажити поточну версію і випробувати її в дії!

Ресурси для скачування

Схожі теми

Підпишіть мене на повідомлення до коментарів

Для чого потрібна нова графічна модель?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: