方法1. 利用Bitmap.createBitmap

Bitmap adjustPhotoRotation(Bitmap bm, final int orientationDegree) {

Matrix m = new Matrix();
m.setRotate(orientationDegree, (float) bm.getWidth() / 2, (float) bm.getHeight() / 2);

try {

Bitmap bm1 = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true);

return bm1;

} catch (OutOfMemoryError ex) {
}

return null;

}


方法2. 利用Canvas.drawBitmap

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;
}


性能测试:

1. 手机

CPU : MTK6575 ,1G Hz

MEM : 512MB

OS : andoid 2.3.7

2.图片尺寸1632 * 1224


结果:

1. 方法1在280 - 350毫秒间, 方法2在110毫秒左右。

2. 方法2优于方法1

更多相关文章

  1. ANDROID NDK makefile 链接静态库的方法
  2. vue判断手机类型是安卓、微信或IOS
  3. Android(安卓)GPS学习 (二) :GPS 服务启动以及初始化流程
  4. Android(安卓)studio新建activity运行出错解决方法
  5. android gpuimage显示的缩放和剪裁模式
  6. Android学习之保持屏幕常亮的几种方法
  7. ActionBar setDisplayOptions 使用详解
  8. Android(安卓)通过字符串来获取R下面资源的ID 值
  9. android 得到唯一码和电话号码

随机推荐

  1. android-JNI
  2. Android(安卓)管理Fragments
  3. Android单选按钮对话框用法实例分析
  4. Could not find com.android.support:app
  5. Android(安卓)一键锁屏实现
  6. Android(安卓)TabHost的使用(二)
  7. Conversion to Dalvik format failed wit
  8. Android(安卓)---js与java的相互调用
  9. 理解Android(安卓)Fragmentation问题
  10. Android中Fragment中启动一个Activity,实