将SVG图像动态缩放到帧/窗口大小

时间:2013-06-18 13:39:40

标签: java swing svg java-7

我正在使用SVGSalamander。 我的代码加载svg图像并将其设置为JDesktopPane的背景。

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);

按比例缩放

1 个答案:

答案 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()方法

的代码