我正在创建一个类似于 Adobe Illustrator 的程序,但要简单得多,并且生成代码而不是图像。
我遇到的问题是 AffineTransform 无法正常工作。很可能是因为误用。是的,我知道有很多 AffineTransform 线程,但它们不能回答我的问题。
目前我正在尝试使用三个变量(scale、centerX、centerY)来控制图像的查看。centerX 和 centerY 是相对于图像的,而不是屏幕坐标。它们的目的是使放大和缩小从 JPanel 的中心而不是左上角。
我已经进行了几次不同的尝试以非常接近,但对于我正在做的事情还不够准确。完成此操作后,我不知道如何处理用户交互,因为 AfflineTransform.createInverse() 会引发 NoninvertibleTransformException。这方面的建议也很好。
我已经尝试了很多没有配置,但没有运气。这是我最后的方法,也许可以让您了解我正在尝试做的事情。
private BufferedImage image;
private boolean loadingImage;
private double scale = 1;
private double centerX = 0;
private double centerY = 0;
private boolean disableDrag = false;
private boolean disableZoom = false;
private AffineTransform affineTransform;
private AffineTransform createAffineTransfomation() {
affineTransform = new AffineTransform();
affineTransform.translate(
(centerX - (image.getWidth() / 2)) * scale,
(centerY - (image.getHeight() / 2)) * scale
);
affineTransform.scale(scale, scale);
return affineTransform;
}
我希望我能很好地解释自己。这个 AffineTransform 的东西让我很困惑,我几乎无法解释我正在尝试做什么。