如何使用Java中的AffineTransform将图像向右翻转?

时间:2022-05-16 12:09:10

I have the flip left functionality down (see code below) but I can't seem to find how to do a flip right. Are the calculations similar?

我有左翻功能(见下面的代码),但我似乎无法找到如何做右翻。计算是否相似?

Flip Left:

{
    gb.drawImage(img, 0, 0, null);
    gb.dispose();

    AffineTransform tx = new AffineTransform();
    tx.translate(img.getHeight(null) / 2, img.getWidth(null) / 2);
    tx.rotate(Math.PI / 2);

    tx.translate(-img.getHeight(null) / 2, -img.getWidth(null) / 2);
    AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);

    buffImg = op.filter(buffImg, null);
 }

1 个解决方案

#1


If you want to rotate in multiples of 90 degrees left or right, you could use the AffineTransform.getQuadrantRotateInstance(int) methods instead:

如果要以向左或向右90度的倍数旋转,可以使用AffineTransform.getQuadrantRotateInstance(int)方法:

AffineTransform rotateLeft = AffineTransform.getQuadrantRotateInstance(1);
AffineTransform rotateRight = AffineTransform.getQuadrantRotateInstance(-1);

There's also anchored versions:

还有锚定版本:

AffineTransform rotateRightCentered = AffineTransform.getQuadrantRotateInstance(-1, centerX, centerY);

If you like to use radians, yes, it's similar. 90 degrees left is -(Math.PI / 2).

如果你喜欢使用弧度,是的,它是相似的。剩下90度是 - (Math.PI / 2)。

#1


If you want to rotate in multiples of 90 degrees left or right, you could use the AffineTransform.getQuadrantRotateInstance(int) methods instead:

如果要以向左或向右90度的倍数旋转,可以使用AffineTransform.getQuadrantRotateInstance(int)方法:

AffineTransform rotateLeft = AffineTransform.getQuadrantRotateInstance(1);
AffineTransform rotateRight = AffineTransform.getQuadrantRotateInstance(-1);

There's also anchored versions:

还有锚定版本:

AffineTransform rotateRightCentered = AffineTransform.getQuadrantRotateInstance(-1, centerX, centerY);

If you like to use radians, yes, it's similar. 90 degrees left is -(Math.PI / 2).

如果你喜欢使用弧度,是的,它是相似的。剩下90度是 - (Math.PI / 2)。