How to avoid OutOfMemory ex while rotating the image?

前端 未结 2 1085
醉酒成梦
醉酒成梦 2021-01-18 04:23
public static boolean rotateBitmapByExifAndSave(File targetFile){

  if (targetFile==null || !targetFile.exists() || !targetFile.canRead() || !targetFile.canWrite())         


        
2条回答
  •  深忆病人
    2021-01-18 04:50

    Make a method name decode file:

    public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){
             try {
                 //Decode image size
                 BitmapFactory.Options o = new BitmapFactory.Options();
                 o.inJustDecodeBounds = true;
                 BitmapFactory.decodeStream(new FileInputStream(f),null,o);
    
                 //The new size we want to scale to
                 final int REQUIRED_WIDTH=WIDTH;
                 final int REQUIRED_HIGHT=HIGHT;
                 //Find the correct scale value. It should be the power of 2.
                 int scale=1;
                 while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT)
                     scale*=2;
    
                 //Decode with inSampleSize
                 BitmapFactory.Options o2 = new BitmapFactory.Options();
                 o2.inSampleSize=scale;
                 return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
             } catch (FileNotFoundException e) {}
             return null;
         }
    

    then call this method like this (You can call this method in button click listener)

    Bitmap bi = decodeFile(new File(path),1280,800);
    

    Where path is the path of image where you save your image.. in my case it is

    String path = Environment.getExternalStorageDirectory().toString() + "/nature.jpg";
    

    In case of any problem - ask :) Hope this helps.

提交回复
热议问题