gpt4 book ai didi

java - 旋转 BufferedImage 时出现问题

转载 作者:搜寻专家 更新时间:2023-10-30 21:44:56 25 4
gpt4 key购买 nike

我在使用 AffineTransform 类在 Java 中旋转图像时遇到了一些问题。

我有以下创建图像旋转(90 度)副本的方法:

private BufferedImage createRotatedCopy(BufferedImage img, Rotation rotation) {
int w = img.getWidth();
int h = img.getHeight();

BufferedImage rot = new BufferedImage(h, w, BufferedImage.TYPE_INT_RGB);

double theta;
switch (rotation) {
case CLOCKWISE:
theta = Math.PI / 2;
break;
case COUNTERCLOCKWISE:
theta = -Math.PI / 2;
break;
default:
throw new AssertionError();
}

AffineTransform xform = AffineTransform.getRotateInstance(theta, w / 2, h / 2);
Graphics2D g = (Graphics2D) rot.createGraphics();
g.drawImage(img, xform, null);
g.dispose();

return rot;
}

旋转是一个简单的枚举,其值为 NONE、CLOCKWISE 和 COUNTERCLOCKWISE。

我的问题的症状显示在这里:

http://perp.se/so/rotate_problems.html

因此,旋转工作正常,但生成的图像没有锚定到正确的坐标(或应该如何放置)。而且由于我一开始真的不知道自己到底在做什么(我的线性代数很弱),所以我不知道如何自己解决这个问题。

我尝试过随机摆弄 AffineTransform 实例,但它对我没有帮助(当然)。我试过谷歌搜索(和搜索 SO),但我看到的所有示例基本上都使用与我相同的方法......这对我不起作用。

感谢您的建议。

最佳答案

如果必须将变换表示为单个旋转,则 anchor 取决于旋转方向:(w/2, w/2)(h/2, h/2).

不过用translate来表达可能更简单;旋转;翻译,例如

AffineTransform xform = new AffineTransform();
xform.translate(0.5*h, 0.5*w);
xform.rotate(theta);
xform.translate(-0.5*w, -0.5*h);

还可以考虑使用 getQuadrantRotateInstance 而不是 getRotateInstance

关于java - 旋转 BufferedImage 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2257141/

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