首页 > 代码库 > Android两种旋转Bitmap方法比较
Android两种旋转Bitmap方法比较
方法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) { ex.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; }
方法2. 利用Canvas.drawBitmap
Bitmap adjustPhotoRotation(Bitmap bm, final int orientationDegree) { try { int width = bm.getWidth(); int height = bm.getHeight(); Matrix matrix = new Matrix(); matrix.setRotate(orientationDegree, ( float ) width / 2, ( float ) height / 2); float targetX = 0; float targetY = 0; if (orientationDegree == 90 || orientationDegree == 270) { if (width > height) { targetX = ( float ) height / 2 - ( float ) width / 2; targetY = 0 - targetX; } else { targetY = ( float ) width / 2 - ( float ) height / 2; targetX = 0 - targetY; } } matrix.postTranslate(targetX, targetY); Bitmap bm1 = Bitmap.createBitmap(bm.getHeight(), bm.getWidth(), Bitmap.Config.ARGB_8888); Paint paint = new Paint(); Canvas canvas = new Canvas(bm1); canvas.drawBitmap(bm, matrix, paint); return bm1; } catch (OutOfMemoryError e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
性能测试:
1. 手机
CPU : MTK6575 ,1G Hz
MEM : 512MB
OS : andoid 2.3.7
2.图片尺寸1632 * 1224
结果:
1. 方法1在280 - 350毫秒间, 方法2在110毫秒左右。
2. 方法2优于方法1
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。