我想相对于中心旋转图像。我尝试了很多方法,使用Canvas,GraphicsContext,SnapshotParameters,.getTransforms()。add(new Rotate ..),rotation.setPivotX,但并没有任何效果,它们更改了照片的位置,现在我回到了.setRotate (90)相对于照片的中心点,但不保存最后一个位置,因此旋转看起来像。
位置3(R单击<-应该回到中心位置1,但它是从1位置而不是从2位置滚动
现在我的代码看起来像是要悬挂照片,而我正在使用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度。
和平