Bitmap优化和工具(2)

指定压缩图片得到Bitmap,主要是有写注释,看的明白点

  private Bitmap compressImageFromFile(String srcPath) {  
        BitmapFactory.Options newOpts = new BitmapFactory.Options();  
        newOpts.inJustDecodeBounds = true;//只读边,不读内容  
        Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);  
  
        newOpts.inJustDecodeBounds = false;  
        int w = newOpts.outWidth;  
        int h = newOpts.outHeight;  
        float hh = 500f;//  
        float ww = 400f;//  
        int be = 1;  
        if (w > h && w > ww) {  
            be = (int) (newOpts.outWidth / ww);  
        } else if (w < h && h > hh) {  
            be = (int) (newOpts.outHeight / hh);  
        }  
        if (be <= 0)  
            be = 1;  
        be = 8;
        newOpts.inSampleSize = be;//设置采样率    
        
          
        newOpts.inPreferredConfig = Config.ARGB_8888;//该模式是默认的,可不设  
        newOpts.inPurgeable = true;// 同时设置才会有效  
        newOpts.inInputShareable = true;//。当系统内存不够时候图片自动被回收  
          
        bitmap = BitmapFactory.decodeFile(srcPath, newOpts);  
//      return compressBmpFromBmp(bitmap);//原来的方法调用了这个方法企图进行二次压缩  
                                    //其实是无效的,大家尽管尝试  
        return bitmap;  
    }

 
    
   从文件路径中读取图片的属性, 拍照之后,获得图片的路径,得到图片的拍摄角度的属性,

 public static int readPictureDegree(String path) {
        int degree = 0;
        try {
        ExifInterface exifInterface = new ExifInterface(path);
        int orientation = exifInterface.getAttributeInt(
        ExifInterface.TAG_ORIENTATION,
        ExifInterface.ORIENTATION_NORMAL);
        switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
        degree = 90;
        break;
        case ExifInterface.ORIENTATION_ROTATE_180:
        degree = 180;
        break;
        case ExifInterface.ORIENTATION_ROTATE_270:
        degree = 270;
        break;
        }
        } catch (IOException e) {
        e.printStackTrace();
        }
        return degree;
        }

   
 对一个Bitmap根据角度进行旋转操作

   public static Bitmap rotate(Bitmap b, int degrees) {
        if(degrees==0){
        return b;
        }
        if (degrees != 0 && b != null) {
        Matrix m = new Matrix();
        m.setRotate(degrees, (float) b.getWidth() ,
        (float) b.getHeight() );
        try {
        Bitmap b2 = Bitmap.createBitmap(b, 0, 0, b.getWidth(),
        b.getHeight(), m, true);
        if (b != b2) {
        b.recycle(); // Android开发网再次提示Bitmap操作完应该显示的释放
        b = b2;
        }
        } catch (OutOfMemoryError ex) {
        // Android123建议大家如何出现了内存不足异常,最好return 原始的bitmap对象。.
        }
        }
        return b;
        }


你可能感兴趣的:(Bitmap优化和工具(2))