gpt4 book ai didi

java - 如何在 JavaFX Canvas 中同步多个图像的旋转

转载 作者:行者123 更新时间:2023-12-01 10:02:54 25 4
gpt4 key购买 nike

我有多个要一起旋转绘制的对象。当它们处于 0 度(直面)时,它们很好,但当它们不是 0 度时,看起来像这样:

Wierdness

我正在使用此代码进行旋转:

private void rotate(GraphicsContext gc, double angle, double px, double py) {
Rotate r = new Rotate(angle, px, py);
gc.setTransform(r.getMxx(), r.getMyx(), r.getMxy(), r.getMyy(), r.getTx(), r.getTy());
}

private void drawRotatedImage(GraphicsContext gc, Image image, double angle, double tlpx, double tlpy) {
gc.save(); // saves the current state on stack, including the current transform
rotate(gc, angle, tlpx + image.getWidth() / 2, tlpy + image.getHeight() / 2);
gc.drawImage(image, tlpx, tlpy);
gc.restore(); // back to original state (before rotation)
}

我有一组图像,我使用并通过使用一个统一角度调用drawRotatedImage来旋转它们。所有图像均为 32 x 32。如何修复图像中的这种偏移?

最佳答案

要将图像作为一个组进行旋转,只需对所有这些图像使用相同的转换即可:

而不是

gc.save();
gc.setTransform(new Affine(new Rotate(angle, image1CenterX, image1CenterY)));
gc.drawImage(image1, image1X, image1Y);
gc.restore();

gc.save();
gc.setTransform(new Affine(new Rotate(angle, image2CenterX, image2CenterY)));
gc.drawImage(image2, image2X, image2Y);
gc.restore();

...

(如果您为每个图像调用drawRotatedImage,这就是您正在做的事情)

使用

gc.save();
gc.setTransform((new Affine(new Rotate(angle, rotationCenterX, rotationCenterY)));

gc.drawImage(image1, image1unrotatedX, image1unrotatedY);
gc.drawImage(image2, image2unrotatedX, image2unrotatedY);
...

gc.restore();

关于java - 如何在 JavaFX Canvas 中同步多个图像的旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36676091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com