我有一个图像,我希望它以逆时针方向移动,这是我的问题。我有一个代码,但似乎我的代码无法正常工作。如果我犯了错误,你可以查看我的代码。请帮我解决这件事......
这是我的代码:
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);
}
答案 0 :(得分:1)
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"));
}
}
BufferedImage
到ImageIO
辅助方法AffineTransformOp
对象,并为其提供一个旋转实例转换,最好是QuadrantRotateInstance
,因为您有兴趣完全按 90°旋转。 3
表示3个象限,因此每次旋转90度三次;这相当于一个逆时针旋转。BILINEAR
方法,这是半快速和半质量的。 filter
你的转变;也就是说,将其应用于图像。过滤返回一个新的BufferedImage
,或者将新图像存储在给定filter
(null
上面的第二个参数中 - 我们将图像存储在新的BufferredImage
对象中)< / LI>
write
或将图片保存到文件中。 注释:
这是一个关于如何进行高效90°变换的非常快速的示例。这不是唯一的途径。拿这个代码并适合你的。确保正确处理例外(与我的例子不同)
如果您想了解更多信息,请阅读 javadoc 中有关每个对象的更多信息。
是的,sooo,我看到 - 在阅读OP代码后 - 实际上这是无关,导致OP似乎想要一个 visual < / em>旋转,不仅仅是旋转图像并呈现它 如果有人碰到这个问题并且正在寻找这个问题,我会把它留在这里 其余的,请忽略它。