LINUX.ORG.RU

Ищу годную либу для 2D графики

 , ,


0

3

Собственно нужна возможность рисовать что угодно на 2D холсте. Прога пишется на Rust, так что желательно что-то с C-API.

Что есть:

  • Старичок cairo, который, вроде как, даже планируют включить в стандарт C++. Плюсы: везде есть, маленький. Минусы: с распространением могут быть проблемы (попробуй его собери под виндой), примеров маловато.
  • QPainter, ака Qt. Плюсы: я его знаю, он жив, дока. Минусы: жирный, нет биндингов, свои закидоны с отрисовкой.
  • Skia. Плюсы: активно развивается, hi-end, быстрая. Минусы: доки нету, жирная что ужас (Qt отдыхает), нет биндингов.

Мне не нужны виджеты, ибо буду рисовать на холсте и сохранять в файл. Никакого GUI.

Чем более кроссплатформенное - тем лучше.

PS: возможно есть что-то написанное на Rust - не нашел.

а можно вопрос? Если Skia такая хорошая, то почему в стандарт хотят cairo?(насколько мне известно, cairo в стандарте это как вилами по воде писано пока что)

zamazan4ik ★★ ()

Почему не SDL/SDL2 + SDL_gfx или как-там их.

И ещё SFML был вроде.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)

cairo ... попробуй его собери под виндой

А какие для винды проблемы?

Это не говоря о других проектах и тривиального Cygwin.

gag ★★★★★ ()

Прога пишется на Rust

Да ну, бери php-gd.

cnupm ()

А как насчет встроить броузер на вебките и туда рисовать на жабаскрипте? :)

nikolnik ★★★ ()

с распространением могут быть проблемы (попробуй его собери под виндой), примеров маловато.

Так собери один раз и распространяй или ты про сборку конечными пользователями под виндой? По поводу примеров не совсем тебя понимаю. На сайте примеры есть, API у cairo довольно типовой для подобного рода библиотек. У меня были некоторые проблемы разве что с специфичными вещами типа cairo_win32_surface - там действительно мало было примеров, приходилось лезть в код реальных проектов.

Amp ★★★ ()
Ответ на: комментарий от EXL

Мне не для игр нужен. А картинки генерировать. OpenGl тоже не нужен.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от nikolnik

Такое уже сделано =) Но мне такой костыль не подходит. Слишком жирно и медленно.

RazrFalcon ★★★★★ ()

Да я в общем на Cairo изначально и остановился. Думал, что может что-то пропустил.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от Amp

У него там хитрости с последовательностью вызовов.

Пример: https://www.cairographics.org/cookbook/ellipses/

То есть нужно кроме API, еще хорошо понимать его внутреннюю кухню.

Я привык к QPainter. Одна строка - одно действие. Здесь же совсем на оборот.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Ну, как посмотреть. Но сейчас загуглил - оно медленнее cairo на таких задачах.

Shadow ★★★★★ ()

Можно на голом Xlib/XCB писать как вариант. Вот какие-то мои потуги что-то писать на XCB на си: Прокрутка(неполная перерисовка) изображения в иксах (комментарий)

и вот еще http://pastebin.com/Qin8fgND https://i.imgur.com/IYrjlnO.png

SZT ★★★★ ()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Иксы есть для всех ОС. Разве что под андроид и всякие айпэды их нет. Тебе и туда надо?

SZT ★★★★ ()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

И да, уточни свою задачу. Что именно ты хочешь рисовать? Какой функционал требуется от библиотеки?

SZT ★★★★ ()

Непонятны требования. Что от библиотеки?

andreyu ★★★★★ ()
Ответ на: комментарий от SZT

Костыль космический. Предлагаете еще и иксы за собой таскать? Я в своём уме еще.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от SZT

andreyu

Генерация картинок. То есть возможность рисовать примитивы, кривые, текст, и тд.

RazrFalcon ★★★★★ ()
Ответ на: gd от anonymous

Я так понимаю, что эта либа больше для манипуляций, чем для рисования.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Генерация картинок. То есть возможность рисовать примитивы, кривые, текст, и тд.

Тогда непонятно, почему не подойдет ogl?

Попробуйте приспособить http://www.antigrain.com/

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Хз. Мне показывать их не надо. Не пойму как мне поможет ogl.

agg мёрт же. Я не настолько крут, чтобы его оживлять.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Тебе нужна библиотека чтоб одновременно для вывода изображения на экран и для рисования примитивов? Или достаточно, чтобы библиотека умела куда-то в буфер записать битмап, а потом уже другими средствами чтобы можно было бы это как-то отобразить? Нужна ли в самой библиотеке встроеннная возможность записать картинку в какой-то png файл? Иксы по-любому надо таскать, если надо выводить изображения на линуксах с иксами. Можно использовать некую библиотеку, которая в памяти в буфер рисует нужное изображение, а потом выводить это самое изображение через XCB в линуксах, через GDI/GDI+, DirectDraw (или DirectX в конце концов) на виндах, и так далее

SZT ★★★★ ()
Ответ на: комментарий от SZT

Выводит его никуда не нужно. Только рисовать. Сложность в отрисовке фигур, линий, градиентов и прочего. Только это мне и нужно.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Можно попробовать от imagemagick поюзать какое-то апи, вроде как там можно всякие векторы и кривые рисовать https://www.imagemagick.org/Usage/draw/#bezier через командную строку. Должно быть и апи для этого. Вроде я даже биндинги для rust находил

SZT ★★★★ ()

<троллинг>возьми свою либу для формата svg, сгенери туда теги и отрисуй системным вызовом инкскейпа (там вроде были параметры командной строки для этого если не путаю)</троллинг>

q0tw4 ★★★★ ()
Ответ на: комментарий от q0tw4

отрисуй системным вызовом инкскейпа

Для cairo есть простой как топор librsvg.

anonymous ()
Ответ на: комментарий от RazrFalcon

Печально, что все алгоритмы рисования на канве известны давным давно, а простой и удобной либы, в которой они были бы собраны без всяких заморочек не сыскать. Если пишешь что-то для общего пользования, можно накатать с 0, а если чисто для себя, то эффективнее всего инкскейп))

q0tw4 ★★★★ ()
Ответ на: комментарий от anonymous

librsvg как и его собрат QtSvg полное убожество. Никакого контроля над содержимым и настройки рендеринга. Эти тупые либы просто берут и рисуют файл как им вздумается. Инкскейп хотябы гарантированно хорошо отрисует.

q0tw4 ★★★★ ()
Последнее исправление: q0tw4 (всего исправлений: 1)
Ответ на: комментарий от q0tw4

можно накатать с 0

Аналог cairo с нуля? Вы мне льстите. Уж лучше портануть agg. Но и на это уйдёт годик-другой.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от q0tw4

Именно это мне и нужно. Брать и рисовать. Контроль - это совсем другая задача.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Ну вот нарисует оно промасштабировав контент по содержимому. Без разрешения. Помнится именно так у меня и бывало, после чего я отказался от идеи узать svg.

q0tw4 ★★★★ ()
Ответ на: комментарий от RazrFalcon

Аналог cairo с нуля?

Нарисовать прямую, эллипс, градиент итп. Ну повозится с закраской дырявых полигонов. Но все это по книгам же.

q0tw4 ★★★★ ()
Ответ на: комментарий от q0tw4

промасштабировав контент по содержимому.

Это как?

Без разрешения.

Да ну?

отказался от идеи узать svg

А зря.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Cairo

Кстати оно не совсем логичное. Qtшный рисователь гораздо удобнее в изучении.

q0tw4 ★★★★ ()
Ответ на: комментарий от q0tw4

Ваши знания да в нужное русло. Правда, почему-то, cairo, который примитивный как пробка, реализован в 160к строк. А так да, линии да кружочки.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

А зря.

Ну на ту конкретную задачу я вскоре нашел решение в 20 раз короче, хотя конечно без возможности подменять рисунок.

q0tw4 ★★★★ ()
Ответ на: комментарий от q0tw4

Только Qt весит в разы больше. И 90% фич QtGui, и 100% фич QtCore, мне не нужно.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

cairo, который примитивный как пробка

Он гавнит немного. То линии слишком сильно сглаживает. То чота не рисует и не понимаешь почему.

q0tw4 ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.