Java旋转图像
@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");
}
我想旋转播放器的图像,但它不起作用。哪里有问题?Java旋转图像
我想我明白你的问题。
围绕(0,0)点进行旋转,所以如果您在屏幕中间打印图像,它将显示在离您想象的地方很远的地方。
为了让事情按预期工作,绘制图像以使图像的中心位于(0,0)处,然后翻译它。
所以,你可能需要做转化为如此: - 翻译,使图像中心为(0,0) - 图像旋转 - 翻译你的形象就可以回到所需点
你可以考虑当使用确认变换时,还有两件事...
当您编码g2.setTransform(at);
时,您必须非常小心,因为您现在为您的整个图形设置了affirmTransform! (见http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html#setTransform%28java.awt.geom.AffineTransform%29:它说:“这种方法应该从未用来申请新的在现有变换...的顶部坐标变换”),所以不要让任何有错误......
更好地利用g2.drawImage(Image, at, ImageObserver)
因为注意到了http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html
另一个常见的错误是创建一个“错误” STARTOF-AffirmeTransform ......我建议你尝试得到一个由AffineTransform at = AffineTransform.getRotateInstance(theta, cx,cy);
也许concate之间进行转换的实例at.concatenate(AffineTransform.getTranslateInstance(dx, dy);
或者干脆使用at.translate(dx, dy)
...但要记住:在您的affineTransformation上以何种顺序进行转换非常重要(如果您[旋转,然后翻译]或[translat然后旋转] - 就像一个提示)...
你会得到什么结果? “不起作用”不是很具描述性。 – 2014-09-24 16:11:07