我正在为 Android 制作游戏,我需要旋转图像。当我旋转它时,它的尺寸显然会发生变化。例如,当它旋转 45 度时(它是正方形,但我希望它适用于任何矩形,因此它是一个更通用的解决方案),它的宽度和高度变成对角线的长度,比原来的长。经过一些代数之后,您可以算出比例因子是 sqrt(2)。但我知道旋转位图的唯一方法是使用矩阵。前任:
matrix.postRotate(degrees);
rotated = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
使用此方法,位图的大小保持不变,因此为了适应图像内容中的旋转图像,必须缩小。这导致了我的问题。
我现在所拥有的应该可以工作,但是运行时却不起作用。可能是因为它过于复杂,但仍然是:
float totalRotated = 0;
public void rotate(float degrees){
if(mBitmap != null){
float increment = (float)((mBitmap.getWidth()/45.0)*(Math.sqrt(2)-1));
totalRotated += degrees;
totalRotated -= (float)((int)totalRotated/360)*360;
matrix.reset();
matrix.setRotate(totalRotated);
rotated = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
rotated = Bitmap.createScaledBitmap(rotated, (int)(mBitmap.getWidth()+(((Math.abs(Math.abs(((int)totalRotated%90)-45)-45)))*increment)), (int)(mBitmap.getHeight()+(((Math.abs(Math.abs(((int)totalRotated%90)-45)-45)))*increment)), true);
}
}
使用Log.d
函数我能够确定最后一个语句中设置的尺寸是我期望的尺寸,但图像的尺寸没有改变。由于这甚至不起作用,我需要一种更好的方法来做到这一点或一种方法来修复我的方法。另外我的方法只适用于正方形。那么,我该怎么做呢?
编辑:
我的方法确实有效,只是我没有调用setBounds()
但这不是唯一的方法,效率很低。