Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: How to rotate a bitmap on a center point

I've been looking for over a day for a solution to this problem but nothing helps, even the answers here. Documentation doesn't explain anything too.

I am simply trying to get a rotation in the direction of another object. The problem is that the bitmap is not rotated around a fixed point, but rather around the bitmaps (0,0).

Here is the code I am having troubles with:

  Matrix mtx = new Matrix();   mtx.reset();   mtx.preTranslate(-centerX, -centerY);   mtx.setRotate((float)direction, -centerX, -centerY);   mtx.postTranslate(pivotX, pivotY);   Bitmap rotatedBMP = Bitmap.createBitmap(bitmap, 0, 0, spriteWidth, spriteHeight, mtx, true);   this.bitmap = rotatedBMP; 

The weird part is, it doesn't matter how I change the values within pre/postTranslate() and the float arguments in setRotation(). Can someone please help and push me in the right direction? :)

like image 295
Stefan Avatar asked Nov 12 '10 16:11

Stefan


1 Answers

I hope the following sequence of code will help you:

Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight, config); Canvas canvas = new Canvas(targetBitmap); Matrix matrix = new Matrix(); matrix.setRotate(mRotation,source.getWidth()/2,source.getHeight()/2); canvas.drawBitmap(source, matrix, new Paint()); 

If you check the following method from ~frameworks\base\graphics\java\android\graphics\Bitmap.java

public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height,         Matrix m, boolean filter) 

this would explain what it does with rotation and translate.

like image 200
Sudar Nimalan Avatar answered Sep 22 '22 21:09

Sudar Nimalan