如何使.setRotate正常工作,旋转后保存位置

时间:2019-05-31 06:33:23

标签: java javafx rotation center

我想相对于中心旋转图像。我尝试了很多方法,使用Canvas,GraphicsContext,SnapshotParameters,.getTransforms()。add(new Rotate ..),rotation.setPivotX,但并没有任何效果,它们更改了照片的位置,现在我回到了.setRotate (90)相对于照片的中心点,但不保存最后一个位置,因此旋转看起来像。

位置1

位置2(L单击) enter image description here

位置3(R单击<-应该回到中心位置1,但它是从1位置而不是从2位置滚动 enter image description here

现在我的代码看起来像是要悬挂照片,而我正在使用javafx.scene.image.ImageView lib的ImageView

if (event.getCode().equals(KeyCode.L)) {
    imgFieldView.setRotate(90);           
    imgFieldView.getLocalToSceneTransform();
    imgFieldView.setPreserveRatio(true);
}

还有我正在尝试的部分代码

        Canvas canvas = new Canvas(100,100);

        GraphicsContext graphicsContext = canvas.getGraphicsContext2D();

        SnapshotParameters params = new SnapshotParameters();
        params.setFill(Color.TRANSPARENT);
        Image rotatedImage = imgFieldView.snapshot(params, null);

        image = imgFieldView.snapshot(params, null);
        canvas.getGraphicsContext2D().drawImage(image, 0, 0);

    imgFieldView.getTransforms().add(new Rotate(90, imgFieldView.getFitHeight(), imgFieldView.getFitWidth()));
    imgFieldView.getTransforms().add(new Rotate(90, imgFieldView.getRotationAxis()));
    imgFieldView.getTransforms().add(new Rotate(90,
            imgFieldView.getBoundsInParent().getMinX()
            + (imgFieldView.getBoundsInLocal().getWidth() / 2),
            imgFieldView.getBoundsInParent().getMinY()
            + (imgFieldView.getBoundsInLocal().getHeight() / 2)));
    imgFieldView.getTransforms().add(new Rotate(90,
            imgFieldView.getFitWidth()
            - (imgFieldView.getImage().getWidth() / 2),
            imgFieldView.getFitHeight()
            - (imgFieldView.getImage().getHeight() / 2)));
    imgFieldView.getTransforms().add(new Rotate(90, imgFieldView.getFitWidth()/2, imgFieldView.getFitHeight()/2));
    imgFieldView.getTransforms().add(new Rotate(90, image.getRequestedWidth(), image.getRequestedHeight()));

什么也没做,我需要做的是:相对于照片的中心旋转并保存最后一个位置以进行平滑旋转。

EDIT

已解决。当您使用.setRotate(90)时,并不是每次将图像旋转90度,而是将其旋转到90度角,为使其正常工作,您必须创建名为angleRotation或类似的变量

if (event.getCode().equals(KeyCode.L)) {
            angleRotation += 90;
            imgFieldView.setRotate(angleRotation);
}

因此,每次碰到方法时,都会从angleRotation中读取角度并增加新的90度。

和平

0 个答案:

没有答案