Java 如何旋转BuffereImage,然后将BuffereImage复制到像素阵列中

Java 如何旋转BuffereImage,然后将BuffereImage复制到像素阵列中,java,image,awt,java-2d,affinetransform,Java,Image,Awt,Java 2d,Affinetransform,我试图旋转导弹炮塔的缓冲图像,使其看起来像是在跟踪目标。基本上,我可以用AffineTransform/AffineTransform轻松地完成这项工作 简而言之,我目前的代码是: public BufferedImage tower = null; try { tower = ImageIO.read(SpriteSheet.class.getResource("/spriteSheet/testTower.png")); }

我试图旋转导弹炮塔的缓冲图像,使其看起来像是在跟踪目标。基本上,我可以用AffineTransform/AffineTransform轻松地完成这项工作

简而言之,我目前的代码是:

public BufferedImage tower = null;

try
        {
            tower = ImageIO.read(SpriteSheet.class.getResource("/spriteSheet/testTower.png"));
        }
        catch(IOException e)
        {


AffineTransform tx = AffineTransform.getRotateInstance(rotationRequired, locationX, locationY);
AffineTransformOp = op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);

//then I draw it using  

g.drawImage(op.filter(tower, null), towerLocationX, towerLocationY, null);
这是可行的,但我想做的是转换(旋转)BuffereImage,然后将新旋转的像素数据复制到像素阵列中,然后将其绘制到屏幕上,因为我相信这是大多数游戏绘制旋转图像的方式,而不是将png直接绘制到屏幕上


但我知道什么。2D游戏如何准确地绘制旋转图像?我做得对吗,还是有更好/更节省内存的方法来实现这一点?

有很多方法可以解决2D游戏中的图像处理问题。不过,在优化之前,你应该问问自己,是否真的需要从这开始。此外,内存优化通常以CPU性能为代价,反之亦然

如果CPU时间是一个问题,一种常见的方法是保持图像阵列已经旋转到特定角度(预先计算)

如果内存有问题,请保留单个图像,并在每次显示时计算旋转的形状。一种更节省内存但占用CPU的方法是绘制矢量形状,而不是图像。与变换图像时使用的平滑算法的插值相比,这也会产生更好的效果。Java支持SVG,并且有几个好的包可用(例如)


最后,可以将Java连接到图形库以执行渲染,从而提高性能。这类库(OpenGL等)使用图形卡的内存来存储图像,以提高CPU使用率()。

要更快获得更好的帮助,请发布.Done。该类称为trigTester。你可以忽略所有的数学运算。这只是为了计算旋转弧度。您需要查看的唯一代码是render()、tick()和构造函数()。我不确定我是否把问题说清楚了。基本上,我想知道是否可以直接旋转包含tower.png像素信息的像素阵列,然后将该像素数据复制到主屏幕像素阵列来绘制,而不是直接将其绘制到屏幕上作为png。“你可以忽略所有的数学。”我通常忽略链接。如果代码是SSCE,请将其添加为。@GayLord:如果您希望陌生人努力了解您的问题并帮助您,那么它将非常有帮助,如果您努力使其更容易帮助您,我们将不胜感激。我支持Andrew的建议,即创建一个“此处”作为对问题的编辑。