2009-07-29 13 views
13

Szukałem dobrej, wieloplatformowej biblioteki rysunków 2D, która może być wywołana z C++ i może być używana do rysowania dość prostej geometrii; linie, prostokąty, okręgi i tekst (poziomy i pionowy) dla niektórych wykresów i zapisz wyniki w formacie PNG.Biblioteka wieloplatformowych rysunków

Myślę, że pakiet komercyjny byłby lepszy niż open source, ponieważ wolelibyśmy nie martwić się kwestiami licencjonowania (chyba że jest coś z licencją w stylu BSD bez klauzuli kredytowej). Spojrzałem na grafikę z Kairu, która wydawała się obiecująca, ale renderowanie tekstu wygląda jak bzdura po wyjęciu z pudełka, a uaktualnienie back-endu tekstu przenosi nas do mrocznej ziemi licencyjnej.

Potrzebuję go do systemów Windows, Mac i Linux. Korzystnie coś dość lekkiego i łatwego do zintegrowania. Myślałem o Qt, ale to zbyt ciężkie dla naszej aplikacji.

Wszelkie pomysły na ten temat będą niesamowite.

+2

Tak, szkoda, że ​​'QImage' i' QPainter' są pochowane w 'QtGui' zamiast w oddzielnej bibliotece' QtPainting'. Kiedy podzielili biblioteki w Qt 4.0, nie były one użyteczne bez "QApplication", ale obecnie można ich używać w osobnych wątkach, więc 'QtPainting' miałoby sens, IMO. Poczekajmy na Qt 5 :) –

Odpowiedz

12

Spróbuj Anti-Grain Geometry. Z opisu:

Geometria przeciwziarnista (AGG) to bezpłatna biblioteka graficzna Open Source napisana w przemysłowym standardzie C++. Warunki użytkowania AGG są opisane na stronie Licencja. AGG nie zależy od żadnego graficznego interfejsu API ani technologii. Zasadniczo można myśleć o AGG jako o silniku renderującym, który wytwarza obrazy pikselowe w pamięci z niektórych danych wektorowych. Ale oczywiście AGG może zrobić znacznie więcej. Idee i filozofia AGG są:

  • antyaliasing.
  • Dokładność podpinki.
  • Najwyższa możliwa jakość.
  • Wysoka wydajność.
  • Niezależność od platformy i kompatybilność.
  • Elastyczność i rozciągliwość.
  • Lekka konstrukcja.
  • Niezawodność i stabilność (w tym stabilność liczbowa).
+0

Dzięki, to wygląda na moją aleję, zamierzam to sprawdzić. – Gerald

+0

Niedawno zauważyłem, że mój odbiornik GPS używa AGG do renderowania map. Schludny! –

+5

Jako FYI, wielokrotnie próbowałem skontaktować się z twórcami AGG w związku z uzyskaniem licencji komercyjnej i nigdy nie otrzymałem odpowiedzi. Minęły 2 lata, odkąd pojawiły się jakieś wiadomości na stronie, więc zakładam, że nie są już obsługiwane. Tak więc skończyłem właśnie wdrażając własne niestandardowe rozwiązanie na trzech platformach, których potrzebowałem. To prawdopodobnie dobre rozwiązanie, jeśli używasz starszej wersji z licencją inną niż GPL, więc zostawię to jako najlepszą odpowiedź, ale po prostu nie chciałem zajmować się nieobsługiwaną biblioteką. – Gerald

1
+2

Użyłem zarówno SDL, jak i SFML i zdecydowanie polecam SFML przez SDL. Wykorzystuje konstrukty C++ (OOP, funkcja overlods, ...) i jest znacznie łatwiejsze i przyjemniejsze. Moją jedyną wadą jest to, że wciąż jest to ostatnia biblioteka w porównaniu do SDL, więc może nie być tak stabilna. –

+2

również, SDL nie ma funkcji rysowania prymitywów wymienionych. Musisz znaleźć kod zrobiony przez innych lub sam go zakodować. –

2

Antigrain robi wysokiej jakości prymitywny renderingu i wydaje się być w stanie renderować czcionek True Type i posiada licencję na wykorzystanie dostępnej na żądanie.

http://www.antigrain.com/

0
+0

... nie jest biblioteką. – cubuspl42

+0

Proszę wyjaśnij swoją definicję biblioteki. –

+0

To jest coś, co ma kod. OpenGL to tylko standardowy interfejs API używany do rozmawiania z GPU. Nie możesz do niego linkować, nie możesz go kupić, nie możesz go pobrać. Nawiasem mówiąc, bezpośrednie wywoływanie funkcji OpenGL w rzeczywistości nigdy nie jest obsługiwane na wielu platformach. Biblioteki takie jak SDL lub SFML są. – cubuspl42

1

Czy próbowałeś FLTK? Jest lekki, wieloplatformowy, obsługuje grafikę 2D/3D i jest wyposażony w dobry zestaw widgetów (w tym komponent do tworzenia wykresów). Interfejs API jest prosty i prosty.

0

Wybrałbym AGG lub Kair.

1

Istnieje również libgd - prosty, ale dobrze napisany.

Jeśli chodzi o Cairo Graphics, nie mogę w to uwierzyć renders text, który wygląda źle. Jeśli jesteś szczególnie zaniepokojony renderowaniem tekstu, State of the Text Rendering od stycznia 2010 daje całkiem dobry przegląd.

+0

Powinienem być trochę bardziej bezpośredni; Cairo Graphics dobrze renderuje duży tekst, ale musiałem renderować małe etykiety tekstowe na wykresach i wykresach, i to wyglądało jak bzdura, ponieważ używa grafiki wektorowej do renderowania. Tak długo, jak tekst jest wystarczająco duży dla co najmniej 2-pikselowych linii, wszystko jest w porządku, ale spróbuj renderować tekst o wielkości czcionki 8 i zobacz, czy możesz go przeczytać;) – Gerald

1

Używam CImg: platforma krzyżowa (samodzielny pojedynczy plik nagłówkowy), prosta, zwięzła. PNG nie jest obsługiwany natywnie, ale można go obsłużyć, jeśli zainstalowano ImageMagick (patrz supported formats).

Zobacz także ten related question.

+0

Jestem pod dużym wrażeniem CImg. Zdecydowanie najłatwiejszy do zintegrowania z kilkoma bibliotekami, w których grałem. –

6

Kolejny: Skia. Używany w Androidzie i Chrome, w ramach aktywnego rozwoju, przyspieszenie HW.

1

Możesz użyć Allegro 5 (ponieważ wspomniane są SDL i SFML). Zapewnia to wszystkie wymagane platformy (i więcej) i może renderować kształty i zapisywać do PNG. Wersja 5 ma znacznie ulepszone API i przyspieszenie sprzętowe. W przypadku każdej z tych niskopoziomowych bibliotek wieloplatformowych musisz znaleźć własne rozwiązanie do tworzenia wykresów.

Zamieszczam kilka uwag o Allegro i używam go na Macu.

+0

To wygląda bardzo ładnie. Czy wiesz, czy można go używać w aplikacji, która ma własne zarządzanie oknami, zamiast korzystać z zarządzania oknami Allegro? – Gerald

Powiązane problemy