简书链接:bitmap旋转平移有效的样板代码
文章字数:251,阅读全文大约需要1分钟
哎、不服老不行了,现在基础都给搞懵逼了。

bitmap旋转90 ,测试是居中旋转的,之前不是距中旋转的代码我有空看看比较下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static Bitmap rotateBitmap(Bitmap origin, float alpha) {
if (origin == null) {
return null;
}
int width = origin.getWidth();
int height = origin.getHeight();
Matrix matrix = new Matrix();
matrix.setRotate(alpha);
// 围绕原地进行旋转
Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
if (newBM.equals(origin)) {
return newBM;
}
origin.recycle();
return newBM;
}

平移代码 如果设置画笔则能看到移动后被挪开的背景颜色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    /**
* 平移代码
* @param origin
* @param x
* @param y
* @return
*/
public static Bitmap translateBitmap(Bitmap origin, float x,float y) {
// Bitmap returnBitmap = Bitmap.createBitmap(origin,0,0,origin.getWidth(),origin.getHeight());
Bitmap returnBitmap = Bitmap.createBitmap(origin.getWidth(),origin.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(returnBitmap);
//2.设置画笔
// Paint paint=new Paint();
// paint.setColor(Color.BLACK);
// canvas.drawColor(Color.WHITE);
// paint.setAntiAlias(true); //消除锯齿
//3.画位图

Matrix matrix=new Matrix();
matrix.postTranslate(x, y);
canvas.drawBitmap(origin,matrix, null);

return returnBitmap;

平移下面这样写无法平移没有效果的 ,目前没搞懂原因,可能是要进行所谓的其他缩放等操作,百思不得其解,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static Bitmap rotateBitmap(Bitmap origin, float x,float y) {
if (origin == null) {
return null;
}
int width = origin.getWidth();
int height = origin.getHeight();
Matrix matrix = new Matrix();
matrix.postTranslate(x,y);
// 围绕原地进行旋转
Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
if (newBM.equals(origin)) {
return newBM;
}
origin.recycle();
return newBM;
}

之前可能是即时运行问题现在又可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

public static Bitmap adjustPhotoRotation(Bitmap bm, final int orientationDegree) {

Matrix m = new Matrix();
m.setRotate(orientationDegree, (float) bm.getWidth() / 2, (float) bm.getHeight() / 2);
float targetX, targetY;
if (orientationDegree == 90) {
targetX = bm.getHeight();
targetY = 0;
} else {
targetX = bm.getHeight();
targetY = bm.getWidth();
}

final float[] values = new float[9];
m.getValues(values);

float x1 = values[Matrix.MTRANS_X];
float y1 = values[Matrix.MTRANS_Y];

m.postTranslate(targetX - x1, targetY - y1);

Bitmap bm1 = Bitmap.createBitmap(bm.getHeight(), bm.getWidth(), Bitmap.Config.ARGB_8888);


Paint paint = new Paint();
Canvas canvas = new Canvas(bm1);
canvas.drawBitmap(bm, m, paint);

return bm1;
}