2009-07-29 3 views
13

Я искал хорошую кросс-платформенную библиотеку 2D-графики, которую можно вызывать из C++, и ее можно использовать для рисования довольно простой геометрии; линии, прямоугольники, круги и текст (горизонтальные и вертикальные) для некоторых диаграмм и сохранить вывод в PNG.Кросс-платформенная библиотека рисования

Я думаю, что коммерческий пакет был бы предпочтительнее, чем с открытым исходным кодом, потому что мы предпочли бы не беспокоиться о проблемах с лицензированием (если только что-то не имеет лицензии типа BSD без условия кредита). Я посмотрел на Cairo Graphics, которая казалась многообещающей, но рендеринг текста выглядит как дерьмо из коробки, а модернизация текстового интерфейса приводит нас к мутной лицензии.

Мне это нужно для Windows, Mac и Linux. Предпочтительно что-то довольно легкое и простое интегрировать. Я думал о Qt, но это слишком тяжело для нашего приложения.

Любые идеи по этому вопросу были бы замечательными.

+2

Да, жаль, что 'QImage' и' QPainter' похоронены в 'QtGui', а не в отдельной библиотеке' QtPainting'. Когда они разделяют библиотеки lib в Qt 4.0, они не могут использоваться без 'QApplication', но в настоящее время вы можете использовать их в отдельных потоках, поэтому« QtPainting »будет иметь большой смысл, IMO. Подождем Qt 5 :) –

ответ

12

Попробуйте Anti-Grain Geometry. Из описания:

Антигранитная геометрия (AGG) - это бесплатная графическая библиотека с открытым исходным кодом, написанная на промышленном стандарте C++. Условия использования AGG описаны на странице «Лицензия». AGG не зависит от каких-либо графических API или технологий. В принципе, вы можете думать о AGG как о механизме рендеринга, который создает пиксельные изображения в памяти из некоторых векторных данных. Но, конечно, AGG может сделать гораздо больше. Идеи и философия AGG являются:

  • Anti-Aliasing.
  • Точность субпикселя.
  • максимально высокий качество.
  • Высокая производительность.
  • Независимость от платформы и ее совместимость.
  • Гибкость и расширяемость.
  • Легкий дизайн.
  • Надежность и стабильность (включая численную стабильность).
+0

Спасибо, это похоже на то, что я добрался до переулка, я собираюсь проверить это. – Gerald

+0

На днях я заметил, что мой GPS-блок использовал AGG для отображения карты. Ухоженная! –

+5

Как FYI, я неоднократно пытался связаться с разработчиками AGG по поводу получения коммерческой лицензии и так и не получил ответа. Прошло уже 2 года с тех пор, как на сайте были опубликованы новости, поэтому я предполагаю, что он больше не поддерживается. Поэтому я закончил просто сворачивание собственного пользовательского решения на всех трех платформах, которые мне нужны. Это, вероятно, хорошее решение, если использовать более старую версию с лицензией, отличной от GPL, поэтому я оставлю это лучшим ответом, но я просто не хотел иметь дело с неподдерживаемой библиотекой. – Gerald

1
+2

Я использовал SDL и SFML, и я настоятельно рекомендую SFML над SDL. Он использует конструкции C++ (OOP, функции overlods, ...), и это намного проще и веселее. Для меня единственным возможным недостатком является то, что он по-прежнему является недавней библиотекой по сравнению с SDL, поэтому он может быть не таким стабильным. –

+2

также, SDL не поставляется с функциями рисования примитивов, которые он перечислял. Вы должны найти код, сделанный другими, или запрограммировать их самостоятельно. –

2

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

http://www.antigrain.com/

0
+0

... не является библиотекой. – cubuspl42

+0

Пожалуйста, объясните свое определение библиотеки. –

+0

Это что-то, что имеет код. OpenGL - это стандартный API, используемый для общения с GPU. Вы не можете ссылаться на него, вы не можете его купить, вы не можете его загрузить. Кстати, вызов функций OpenGL напрямую на самом деле не является межплатформенным. Библиотеки, такие как SDL или SFML. – cubuspl42

1

Вы пробовали FLTK? Он легкий, кросс-платформенный, имеет поддержку 2D/3D-графики и поставляется с хорошим набором виджета (включая компонент диаграмм). API простой и прямой.

0

Я бы пошел на AGG или в Каир.

1

Существует также libgd - простой, но хорошо написанный.

Относительно Cairo Graphics, я не могу поверить renders text, который выглядит плохо. Если вы особенно обеспокоены текстовым рендерингом, то State of the Text Rendering с января 2010 года дает неплохой обзор.

+0

Я должен был быть более явным; Cairo Graphics отлично отображает большой текст, но мне нужно было отображать небольшие текстовые метки на диаграммах и графиках, и это было похоже на дерьмо, потому что для его рендеринга используется векторная графика. Пока текст достаточно велик, по крайней мере, для 2-пиксельных строк, все в порядке, но попробуйте сделать текст с размером шрифта 8 или около того и посмотреть, можете ли вы его прочитать;) – Gerald

1

Я использую CImg: кросс-платформу (автономный файл с одним заголовком), простой, лаконичный. PNG не поддерживается изначально, но может быть обработан, если установлен ImageMagick (см. supported formats).

См. Также related question.

+0

Я очень впечатлен CImg. На сегодняшний день проще всего интегрировать несколько библиотек, с которыми я играл. –

6

Другой: Skia. Используется в Android и Chrome, при активной разработке, ускорение HW.

1

Вы можете использовать Allegro 5 (поскольку упомянуты SDL и SFML). Это обеспечивает все необходимые вам платформы (и многое другое) и может отображать формы и сохранять в PNG. Версия 5 значительно улучшила API и аппаратное ускорение. С любой из этих низкоуровневых кросс-платформенных библиотек вам нужно будет найти свое собственное решение для построения диаграмм.

Я положил некоторые примечания on my blog об Allegro и использовать его на Mac.

+0

Это выглядит очень красиво. Знаете ли вы, можно ли использовать его в приложении, которое имеет собственное управление окнами вместо использования управления окнами Allegro? – Gerald

Смежные вопросы