我正在尝试绕中心旋转图像。使用RotateAnimation通常可以实现这一点,但我希望它更快一些。现在我正在使用SurfaceView模式和单独的绘制线程。
以下是正确绘制位图的代码(取决于外部“heading”):
heading = 角度, bitmap = 位图, w = 位图宽度, h = 位图高度。
缺点:该图像是圆形的,上面的代码会产生可见的锯齿效果...
下面的代码也在旋转图像,但是在旋转时(从0度顺时针旋转到45度),新图像的中心移动到了底部/右侧。我想,这种偏心效应是由于新图像的宽度/高度增加所致?然而,如果设置filter=true,则此代码不会产生锯齿。是否有一种方法可以使用代码#1,但具有某种抗锯齿效果,或者使用代码#2但消除中心运动?
感谢您的选择。
以下是正确绘制位图的代码(取决于外部“heading”):
heading = 角度, bitmap = 位图, w = 位图宽度, h = 位图高度。
Matrix m = new Matrix();
m.preRotate(heading, w/2, h/2);
m.setTranslate(50,50);
canvas.drawBitmap(bitmap, m, null);
缺点:该图像是圆形的,上面的代码会产生可见的锯齿效果...
下面的代码也在旋转图像,但是在旋转时(从0度顺时针旋转到45度),新图像的中心移动到了底部/右侧。我想,这种偏心效应是由于新图像的宽度/高度增加所致?然而,如果设置filter=true,则此代码不会产生锯齿。是否有一种方法可以使用代码#1,但具有某种抗锯齿效果,或者使用代码#2但消除中心运动?
Matrix m = new Matrix();
m.preRotate(heading, w/2, h/2);
m.setTranslate(50,50);
Bitmap rbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, m, true);
canvas.drawBitmap(rbmp, 50, 50, null);
更新:由于在这个帖子中的讨论,代码#2的正确版本(反锯齿和正确旋转)应该是这样的(省略50,50的偏移量):
Matrix m = new Matrix();
m.setRotate(heading, w/2, h/2);
Bitmap rbpm = Bitmap.createBitmap(bitmap, 0, 0, w, h, m, true);
canvas.drawBitmap(rbpm, (w - rbpm.getWidth())/2, (h - rbpm.getHeight())/2, null);
感谢您的选择。