Android两种 旋转Bitmap方法
2015-08-11 14:20
501 查看
方法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. 利用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
相关文章推荐
- 解决Android中的SQLite数据库并发访问
- 在android布局中使用include和merge标签
- 安卓AndroidManifest.xml介绍
- Android系统启动流程分析
- Android fragment 传值
- android service详解
- Android之旅---广播(BroadCast)
- android 动态加载布局
- Android studio mac版本快捷键
- Android - 小的特点 - 使用最新版本ShareSDK手册分享(分享自己定义的接口)
- android 资源文件命名规范
- 《深入理解Android 卷III》第三章 深入理解AudioService
- Android Permission(授权)大全
- Android 开源项目源码解析之DynamicLoadApk 源码解析
- Android Gradle 本地化部署 maven
- emmc FITRIM/discard命令在android系统中提升write performance的运用
- android的touch事件分发机制-View篇
- android(3)自定义View
- Android安卓开发官方文档国内镜像
- Android整机源码如何轻松下载?清华大学Android源码镜像