2013-06-18 81 views
0

我正在使用SVGSalamander。 我的代碼加載一個svg圖像並將其設置爲JDesktopPane的背景。將SVG圖像動態縮放到框架/窗口大小

File f = new File("awesome_tiger.svg"); 
SVGUniverse svgUniverse = new SVGUniverse(); 
try { 
    SVGDiagram diagram = svgUniverse.getDiagram(svgUniverse.loadSVG(f.toURL())); 
    try { 
    diagram.render(g); 
    } 
    catch(Exception ex) {System.out.println(ex);}} 
catch (Exception ex2) {System.out.println(ex2);} 

我該如何實現圖像完全填充窗口/框架並調整大小?

似乎SVGSalamander的方法isScaleToFit()但我該如何使用它?

我用antiAlias此:g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);(這是它是如何寫在SVGIcon和SVGPanel類)

編輯:解決它

AffineTransform at = new AffineTransform(); 
at.setToScale(jdpPane.getWidth()/diagram.getWidth(), jdpPane.getWidth()/diagram.getWidth()); 
g.transform(at); 
diagram.render(g); 

秤它按比例

+0

我想這一點,我有一個問題,我們內部的框架亦縮放代碼,請幫我解決這個問題 – 2015-09-10 10:52:30

+0

請打開一個新的問題與你的代碼並描述你的問題。 –

回答

0

我們可以使用AffineTransformsetToScale方法

File f = new File("awesome_tiger.svg"); 
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
SVGUniverse svgUniverse = new SVGUniverse(); 
try { 
    SVGDiagram diagram = svgUniverse.getDiagram(svgUniverse.loadSVG(f.toURI().toURL())); 
    try { 
    AffineTransform at = new AffineTransform(); 
    at.setToScale(jdpPane.getWidth()/diagram.getWidth(), jdpPane.getWidth()/diagram.getWidth()); 
    g.transform(at); 
    diagram.render(g); 
    } 
    catch(Exception e2) {System.out.println(e2);}} 
catch (Exception ex) {System.out.println(ex);} 

這是與我重寫paint()方法

相關問題