Strona 1 z 2

Renderowanie odrazu z SVG

Nowy postNapisane: środa, 15 lipca 2015, 16:43
przez Mironas
Szukam możliwie prostej metody na wygenerowanie obrazu na podstawie pliku wektorowego SVG.
Format docelowy: PNG, Gdiplus::Bitmap lub inny który da się wykorzystać.
Jedyne co potrzebuję ustalać to rozmiar wynikowej bitmapy.

Może ktoś ma doświadczenie z jakąś biblioteką która to potrafi. Najlepiej gdyby była darmowa do użytku komercyjnego.

Re: Renderowanie odrazu z SVG

Nowy postNapisane: środa, 15 lipca 2015, 18:25
przez polymorphism
Jeśli dobrze pamiętam, Anti-Grain Geometry ma możliwość czytania plików SVG.

Re: Renderowanie odrazu z SVG

Nowy postNapisane: czwartek, 16 lipca 2015, 12:05
przez Mironas
Sprawdziłem, Anti-Grain Geometry ma taką możliwość.

Ale to rozbudowana biblioteka graficzna. Pakowanie jej do programu tylko po to aby tworzyć PNG z SVG to stosowanie armaty na wróble. W pisanym programie używam już OpenGL oraz GDI+ i kolejna biblioteka graficzna to lekka przesada.
Tym bardziej, że jest na licencji GNU GPL a mój program ma być komercyjny z zamkniętym źródłem.

Re: Renderowanie odrazu z SVG

Nowy postNapisane: czwartek, 16 lipca 2015, 19:14
przez polymorphism
Niby "armata na wróbla", ale jakoś innych lekkich bibliotek dla GDI nie ma.

Może to -> http://svgpp.org

Re: Renderowanie odrazu z SVG

Nowy postNapisane: poniedziałek, 20 lipca 2015, 10:37
przez Mironas
Próbowałem już użyć SVG++ ale po dodaniu (do nowego, pustego projektu) wymaganej biblioteki Boost wywala mi w pliku ...\boost\mpl\always.hpp
błąd w wierszu:
Kod: Zaznacz cały
    template<
        BOOST_MPL_PP_DEFAULT_PARAMS(BOOST_MPL_LIMIT_METAFUNCTION_ARITY, typename T, na)
        >

błędu

[BCC32 Error] always.hpp(26): E2270 > expected


Re: Renderowanie odrazu z SVG

Nowy postNapisane: wtorek, 21 lipca 2015, 09:54
przez polymorphism
Trudno powiedzieć w czym problem. Rozumiem, że boosta masz zainstalowanego poprawnie, tak?

Re: Renderowanie odrazu z SVG

Nowy postNapisane: wtorek, 21 lipca 2015, 11:02
przez Mironas
A co tam się instaluje?
Ściągnąłem bibliotekę Boost, rozpakowałem do katalogu na dysku, a w projekcie dodałem do "Include file search path" ten katalog (...\boost_1_58_0)
Kompilator "widzi" pliki nagłówkowe z Boost-a, bo gdyby nie widział to by nie pokazywał w nich błędów.
Coś jeszcze powinienem zrobić?

Spodziewał bym się raczej jakiś specyficznych ustawień w opcjach projektu.

[EDIT]
OK - faktycznie jest w dokumentacji instrukcja instalacji, ale dotyczy VS i jest tak pokręcona, że sobie z nią nie radzę.
Szukam raczej prostszego sposobu na zrobienie jednej konkretnej czynności.

Re: Renderowanie odrazu z SVG

Nowy postNapisane: wtorek, 21 lipca 2015, 13:05
przez polymorphism
A co tam się instaluje?

Jeśli w C++ Builderze nie masz preintalowanego boosta, to tak, musisz skompilować i dodać boosta do projektu. Do kompilacji biblioteki potrzebujesz narzędzia Boost.Build.

Szukam raczej prostszego sposobu na zrobienie jednej konkretnej czynności.

Do czego Ci te grafiki SVG?

Re: Renderowanie odrazu z SVG

Nowy postNapisane: wtorek, 21 lipca 2015, 16:03
przez Mironas
Do czego Ci te grafiki SVG?

W programie graficznym używam coś w rodzaju klipartów. Na tę chwilę są to pliki PNG z przeźroczystością. Jednak się kiepsko skalują i zajmują dużo miejsca. Wolałbym w programie mieć pliki SVG i w razie potrzeby dynamicznie konwertować je na PNG w określonej skali.

Re: Renderowanie odrazu z SVG

Nowy postNapisane: wtorek, 21 lipca 2015, 17:59
przez polymorphism
A próbowałeś coś z Windows Metafile (.wmf/.emf)?

Re: Renderowanie odrazu z SVG

Nowy postNapisane: wtorek, 21 lipca 2015, 18:45
przez Mironas
Nie próbowałem, nie znam tego formatu. Jutro czegoś poszukam w tym temacie.
Jakieś wskazówki w tym temacie? Jakiś edytor plików, biblioteka?

[EDIT]
OK - już widzę, że pliki ENF mogę edytować w Inkscape a otwierać w GDI+
Dzięki.

Re: Renderowanie odrazu z SVG

Nowy postNapisane: środa, 22 lipca 2015, 13:39
przez Mironas
Format WMF/EMF to porażka.
Przede wszystkim nie obsługuje stopniowania przeźroczystości przez co krawędzie obiektu są postrzępione.
Prędzej chyba zrobiłbym własny mechanizm rysujący dane z SVG na Gdiplus::Bitmap.

Re: Renderowanie odrazu z SVG

Nowy postNapisane: środa, 22 lipca 2015, 15:17
przez Cyfrowy Baron
A nie możesz tych plików graficznych trzymać w zewnętrznej bibliotece i ładować do programu w razie potrzeby?

Re: Renderowanie odrazu z SVG

Nowy postNapisane: środa, 22 lipca 2015, 15:41
przez Mironas
Co masz na myśli pisząc "w zewnętrznej bibliotece"?

Te grafiki (kliparty) mam obecnie w postaci plików PNG dostarczanych razem z programem (wspólny instalator). Rozmiar tych plików powoduje, że instalator jest ogromny. Użytkownik decyduje jak duży ma być umieszczony na grafice klipart. Jeśli rozciągnie go na duży obszar to widać pikselozę. Aby tego uniknąć musiałbym jeszcze bardziej zwiększyć rozmiar plików PNG.

Idealnym rozwiązaniem było by dodanie do programu klipartów w formacie wektorowym. Dzięki temu miałbym mały rozmiar plików i możliwość ich skalowania w nieskończoność. Ale właśnie muszę mieć mechanizm który w locie zamieni mi plik wektorowy (najlepiej SVG) na rastrowy (PNG lub Gdiplus::Bitmap).

Re: Renderowanie odrazu z SVG

Nowy postNapisane: środa, 22 lipca 2015, 16:56
przez Cyfrowy Baron
Już teraz rozumiem. Grafiki rastrowej nie da się powiększać bez utraty ostrości obrazu, czyli rozwiązaniem jest tylko grafika wektorowa. Nie mam jednak pomysłu jak to rozwiązać gdyż nigdy nie potrzebowałem obsługiwać grafiki wektorowej.