2013-06-18 51 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()方法

相关问题