zoukankan      html  css  js  c++  java
  • 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) {
                        }

                   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

  • 相关阅读:
    Qt状态机实例
    <STL> accumulate 与 自定义数据类型
    <STL> 容器混合使用
    散列表(C版)
    Canonical 要将 Qt 应用带入 Ubuntu
    <STL> set随笔
    C++ 文件流
    视频播放的基本原理
    <STL> pair随笔
    c++ 内存存储 解决char*p, char p[]的问题
  • 原文地址:https://www.cnblogs.com/exmyth/p/4632700.html
Copyright © 2011-2022 走看看