2012-01-19 11 views
7

To pytanie, widziałem to, ponieważ SVG-Salamander jest wystarczająco mały dla moich projektów. Ale nie wiem, czy mogę go użyć do tego, ani jak to zrobić.Czy mogę użyć SVG Salamander do rasteryzacji plików SVG do plików PNG? (i jak mogę to zrobić?)

Każdy pomysł?

Jeśli nie mogę, znasz jakieś inne małe SVG do rasteryzacji PNG w java?

dzięki za wszystko.

mam użyć tego kodu:

public static void main(String[] args) throws IOException, SVGException { 
    // TODO Auto-generated method stub 

    File f = new File("./src/game_scheme.svg"); 
    SVGUniverse svgUniverse = new SVGUniverse(); 
    SVGDiagram diagram = svgUniverse.getDiagram(svgUniverse.loadSVG(f.toURL())); 
    BufferedImage bi = new BufferedImage(320, 240, BufferedImage.TYPE_INT_ARGB); 
    Graphics2D ig2 = bi.createGraphics(); 
    diagram.render(ig2); 
    ImageIO.write(bi, "PNG", new File("./yourImageName.png")); 

} 

Ale obrazy nie są gładkie :(, każdy pomysł

+0

Mam do czynienia z podobnym problemem, obrazy png nie są gładkie. Czy istnieje sposób, aby to naprawić? – ayachama

Odpowiedz

3

Tak, to jest możliwe Wszystko, co musisz zrobić, to załadować dokument SVG użyciu. SVG Salamander, utwórz BufferedImage, do którego chcesz napisać, utwórz kontekst Graphics2D z BufferedImage, a następnie wywołaj metodę render() na SVGDiagram, aby narysować na swoim obrazku:

Możesz uprościć proces używając SVGIcon Będzie obsługiwać wszystkie wnętrza salamandry dla ciebie ou i możesz traktować swój dokument SVG jako zwykłą Ikonę Swing.

Jeśli planujesz konwertować wiele plików SVG na obrazy w wierszu poleceń, istnieje również zadanie Ant, które pozwoli Ci przekonwertować SVG na obrazy ze skryptu ant.

SVG Salamander użytkowania docs: http://svgsalamander.java.net/docs/use.html

Prosty demo SVG Salamander z użyciem Swing: http://svgsalamander.java.net/docs/exampleCode/SVGIODemo.html

+0

Nie mogę użyć Anta, ponieważ spowoduje to renderowanie ich do .png po zainstalowaniu aplikacji na system Android. Ale dzięki za informacje, spróbuję, a następnie powiem ci o wyniku. –

3

Jeśli widzisz postrzępione krawędzie, które można rozwiązać dodając renderowania grafiki podpowiedź.

Warto również wywołać metodę dispose() po zakończeniu kontekstu graficznego.

Graphics2D ig2 = bi.createGraphics(); 
ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
diagram.render(ig2); 
ig2.dispose(); 

ImageIO.write(bi, "PNG", new File("./yourImageName.png")); 
+0

Przetestuję twój kod tej nocy. Salamander to bardzo dobra libacja, dziękuję za to. –

+0

Przetestowałem to i ładnie się wyświetla. Jesteś mistrzem w tym. –

+0

Mój plik SVG zawiera wiele szczegółów. Ma małe teksty, które wyglądają na zamazane i nie można ich odczytać po konwersji do formatu PNG. – ayachama

Powiązane problemy