【问题标题】:Dynamically scale SVG image to the frame/window size将 SVG 图像动态缩放到框架/窗口大小
【发布时间】:2013-06-14 18:13:21
【问题描述】:

我正在使用 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);

按比例缩放

【问题讨论】:

  • 我试过了,我遇到一个问题是,我们的内部框架也在缩放,请帮我解决它
  • 请用您的代码打开一个新问题并描述您的问题。

标签: java swing svg java-7


【解决方案1】:

我们可以使用AffineTransform 和setToScale 方法

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() 方法的代码

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多