2

我正在创建一个类似于 Adob​​e 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 的东西让我很困惑,我几乎无法解释我正在尝试做什么。

4

0 回答 0