понедельник, 10 сентября 2012 г.

GDI+ в топку! Даешь Каир!

Достал меня этот GDI+ просто невообразимо! Устал я с ним бодаться по всяким мелочным поводам. То у него съезжают градиенты, то он закрашивает больше или меньше чем нужно, то прямоугольники он рисует на пиксель больше чем нужно но при каких-то определенных условиях. ДОСТАЛО!

Было решено искать замену. Порывшись в интернете, я обнаружил, что с библиотеками 2D графики как-то не густо. И так:
  • Anti-Grain Geometry - я когда-то использовал эту библиотечку. Пока она не стала GPL-ной. И вообще на нее, походу, просто забили. Библиотека не обновлялась с 2007-го года.
  • Fog - библиотека мне приглянулась. Но к сожалению там еще есть кой какие не реализованные вещи. Например непрямоугольные clip-ы, что для меня критично.
  • skia - эту библиотечку мне подсказал один "китайский товарищ". Посмотрел я на нее - что-то уж больно сильно наворочена. Короче не приглянулась она мне.
И вот брожу я по интернету в полной безысходности... и натыкаюсь на cairo. Это просто праздник какой-то!

Все, что нужно есть, включая офигенный антиалиасный клипинг, чего не было даже в GDI+ (гореть ему в аду). Более того, cairo входит в т.н. GTK+ и активно разрабатывается. API на чистом C. Вроде как бы есть C++ надстройка, но в общем это не важно - мне так даже сишный API лучше. А уж как там просто сделана поддержка винды - просто и элегантно. А главное cairo не пытается подмять под себя GUI, чем грешат остальные библиотеки. Только отрисовка и ничего большего!

Конечно компиляция "каира" еще тот праздник, но в принципе решаемо. Откомпилилось нормально, в том числе и под x64. Прогнав тесты, я просто влюбился в "каир", все чётко, все предсказуемо, все просто. Пожалуй проще только чистый GDI.

С картинками "каир" работает, но загружать может только PNG формат. Но можно просто и элегантно подсунуть ему свой DIB, загруженный предварительно чем нибудь (я уже давно использую FreeImage для этих целей). Хотя если не стоит задача применять трансформации или клипинг к изображению, то можно тупо получить от "каира" HDC и вывести изображение в него.

В общем вот такие пироги. Начинаю переходить на использование cairo.

Комментариев нет:

Отправить комментарий