java - 使用 affinetransform swing 进行放大

标签 java swing zooming scale affinetransform

我正在使用 JAVA swing 开发我的个人项目。

该项目是关于在窗口上绘制 map 。

enter image description here

map 可使用仿射变换进行缩放。 我在这里遇到的问题是,每当我放大或缩小 map 时, map 也会发生变化,而不是放大/缩小位于屏幕中心的 map 点

private void updateAT()
{
    Dimension d = panel.getSize();
    int panelW = d.width;
    int panelH = d.height;

    Rectangle2D r = regionList[0].get("Victoria").getShape().getBounds2D();

    scaleX = (panelW/r.getWidth()) * zoom;
    scaleY = (panelH/r.getHeight()) * zoom;

    AffineTransform goToOrigin = AffineTransform.getTranslateInstance(-r.getMinX(), -r.getMinY());

    AffineTransform pan = AffineTransform.getTranslateInstance(panX, panY);

    AffineTransform scaleAndFlip = AffineTransform.getScaleInstance(scaleX, -scaleY);

    //AffineTransform mirror_y = new AffineTransform(1, 0, 0, -1, 0, panelH);

    AffineTransform centre = AffineTransform.getTranslateInstance(panelW/2, panelH/2);
    centre.translate(-((r.getWidth()*scaleX)/2), ((r.getHeight()*scaleY)/2));

    world2pixel.setToIdentity();
    //world2pixel.concatenate(mirror_y);
    world2pixel.concatenate(pan);
    world2pixel.concatenate(centre);
    world2pixel.concatenate(scaleAndFlip);
    world2pixel.concatenate(goToOrigin);
}

最佳答案

这个exampleShape 居中并缩放,p3,按

  • 将对称点平移到原点,

  • 缩放多边形,然后

  • 平移回面板中心。

请注意,串联操作的执行顺序与声明顺序(明显)相反,如 here 中所述。 .

at.setToIdentity();
at.translate(w / 2, h / 2);
at.scale(scale, scale);
at.translate(-p3x[5] + 10, -p3y[5]); 

关于java - 使用 affinetransform swing 进行放大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13023588/

相关文章:

java - 在 Swing 中遇到 Thread.sleep 问题

ios - 缩放后文字变得模糊

java - 如何创建 Sonar 规则来解析 Java 中的自定义 XML 文件?

java - 如何找到 Swing 组件抛出的未知异常的(信息性)堆栈跟踪

java - 运行 JPanel 窗体

google-chrome - 如何取消缩放 Chrome-* 控制台

javascript - 让JCrop支持图像缩放的解决方案

java - 使用 Spring Boot TestRestTemplate 相对路径强制 JSON 转换

java - 代码有时有效但有时无效(内存或线程问题)

java - Spring 扫描器 bean