Java旋转图像

时间:2014-09-24 15:43:41

标签: java image graphics rotation

   @Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2=(Graphics2D) g.create();

        //rotation of player
         if(player.newDirection)
         {
             int rotationX=player.getImage().getWidth(null)/2;
             int rotationY=player.getImage().getHeight(null)/2;

             AffineTransform at=new AffineTransform();




                if(player.direction==LEFT)
                {
                    //graphics.rotate(Math.toRadians(90),bufferedImage.getWidth()/2,bufferedImage.getHeight()/2);
                    //graphics.drawImage(player.getImage(), player.getX(), player.getY(), null);
                    at.setToRotation(Math.toRadians(45), rotationX, rotationY);
                    g2.setTransform(at);
                    g2.drawImage(player.getImage(),player.getX(),player.getY(),null);
                    g2.dispose();
                    System.out.println("sola");
                }

我正在尝试旋转播放器的图像,但它不起作用。问题在哪里?

2 个答案:

答案 0 :(得分:1)

我想我理解你的问题。

在(0,0)点附近进行旋转,因此如果您在屏幕中间打印图像,它将显示在离您想象的地方很远的位置。

为了让事情按预期工作,绘制图像,使图像的中心位于(0,0),然后翻译。

所以你可能必须这样做: - 翻译使图像中心为(0,0) - 旋转图像 - 将图像翻译回所需的点

答案 1 :(得分:0)

使用肯定变换时你可能会考虑另外两件事......

当您编码g2.setTransform(at);时,您必须非常小心,因为您现在为整个图形设置了affirmTransform! (请参阅http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html#setTransform%28java.awt.geom.AffineTransform%29:它说:“此方法应永远用于在现有转换之上应用新的坐标转换...”)所以不要在那里犯任何错误...

更好地使用http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html

上注意到的g2.drawImage(Image, at, ImageObserver)

另一个常见的错误是创建一个'错误的'startOf-AffirmeTransform ...我建议您尝试通过AffineTransform at = AffineTransform.getRotateInstance(theta, cx,cy);获取一个并且可以连接另一个翻译实例at.concatenate(AffineTransform.getTranslateInstance(dx, dy);或者只使用at.translate(dx, dy) } ...但请记住:重要的是oyu performe转换为你的affineTransformation(如果你[旋转然后翻译]或[翻译然后旋转]它会有所不同 - 只是作为提示)......