gpt4 book ai didi

java - 如何在java中使图像逆时针旋转?

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:46 24 4
gpt4 key购买 nike

我有一个图像,我希望它沿逆时针方向移动,这是我的问题。我有一个代码,但似乎我的代码无法正常工作。你可以检查我的代码是否有错误。请帮助我解决这个问题...

这是我的代码:

public void move(long dt)
{

double dt_s = dt / 1e9;
double dx_m = speed * dt_s;
double dy_m = speed * dt_s;

double width = board.x1_world;
double height = board.y1_world;

double min_height = 0.0;
double max_height = height;
double min_width = 0.0;
double max_width = width;

x += dx_m;
if (x >= max_width)
{
x = max_width;

if (y >= min_height)
{
y += dy_m;
}
}
if (y >= max_height)
{
y = max_height;
if (x >= min_width)
{
dx_m *= -1;
}
}
if (x <= min_width)
{
x = min_width;
if (y <= max_height)
{
y -= dy_m;
}
}
if (y <= min_height)
{
y = min_height;
if (x <= max_width)
{
dx_m *= -1;
}
}


}


@Override
public void render(Graphics2D g2d)
{
AffineTransform t = g2d.getTransform();

double height = 0.3;//meter
double width = 0.3;//meter

double bird_footy = height;
double bird_footx = width / 2;


int xx = board.convertToPixelX(x - bird_footx);
int yy = board.convertToPixelY(y + bird_footy);

g2d.translate(xx, yy);

double x_expected_pixels = width * board.meter;
double y_expected_pixels = height * board.meter;

double x_s = x_expected_pixels / ((ToolkitImage) birdImage).getWidth();

double y_s = y_expected_pixels / ((ToolkitImage) birdImage).getHeight();

g2d.scale(x_s, y_s);
g2d.drawImage(getImage(), 0, 0, this);

g2d.setColor(Color.BLACK);

g2d.setTransform(t);
}

最佳答案

就这样:

import java.io.File;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;

class RT {
public static void main(String[] args) throws java.io.IOException {
BufferedImage img = ImageIO.read(new File("input-image.png"));

BufferedImage rotated = new AffineTransformOp(
AffineTransform.getQuadrantRotateInstance(
3, img.getWidth() / 2, img.getHeight() / 2),
AffineTransformOp.TYPE_BILINEAR).filter(img, null);

ImageIO.write(rotated, "PNG", new File("output-image.png"));
}
}
  • 通过 ImageIO 辅助方法将图像加载为 BufferedImage
  • 创建一个 AffineTransformOp 对象,并为其提供旋转实例转换,最好是 QuadrantRotateInstance,因为您希望精确旋转90°3表示3个象限,即旋转3次,每次90°;相当于逆时针旋转一圈。
  • 传递您喜欢的质量因子,通常选择BILINEAR方法,这是半快半好质量的。
  • 过滤您的转换;也就是说,将其应用到图像上。过滤返回一个新的 BufferedImage 或将新图像存储在给定 filter 的第二个参数中(上面的 null - 我们将图像存储在新的 BufferredImage 对象中)
  • 写入或将图像保存到文件中。

注释:
这是一个关于如何进行高效 90° 变换的非常简单的示例。当然这不是唯一的方法。获取此代码并将其适合您的代码。确保正确处理异常(与我的示例不同)。
如果您想了解更多信息,请阅读有关每个对象的 javadoc 的更多信息。

<小时/>

糟糕

是的,sooo,我看到 - 在阅读 OP 的代码之后 - 实际上这是不相关的,因为 OP 似乎想要一个视觉旋转,而不仅仅是旋转图像并呈现它。
如果有人遇到这个问题并正在寻找这个,我会将其留在这里。
对于其余的,请忽略

关于java - 如何在java中使图像逆时针旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767308/

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