2013-02-22 77 views
2
public Bitmap RotationPic(Bitmap tmpBitmap){ 
     int x = tmpBitmap.getWidth(); 
     int y = tmpBitmap.getHeight(); 
     if(x > y){ 

      Matrix matrix = new Matrix(); 
      matrix.reset(); 
      matrix.setRotate(90); 
      return Bitmap.createBitmap(tmpBitmap,0,0, x, y,matrix, true); 
     } 
     return tmpBitmap; 
    } 

句子Bitmap.createBitmap(tmpBitmap,0,0,x,y,matrix,true);有錯誤。旋轉圖片錯誤:java.lang.OutOfMemoryError

我看了網絡圖片,圖片大小很大,大概100k〜300k。

如何解決這個問題?有沒有其他的方式來旋轉圖片?

回答

2

試試這個 但你需要pic的路徑來使用它。 如果你不喜歡的分辨率增加REQUIRED_SIZE值

public static Bitmap DecodeFileToBitmap (String path) 
{ 
    try 
    {  
      File f = new File(path); 

      BitmapFactory.Options o = new BitmapFactory.Options(); 
      o.inJustDecodeBounds = true; 
      BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

      final int REQUIRED_SIZE=500; 

      int scale=1; 
      while(o.outWidth/scale/2>=REQUIRED_SIZE && o.outHeight/scale/2>=REQUIRED_SIZE) 
       scale*=2; 

      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=scale; 
      Bitmap bm = BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
      Bitmap bitmap = bm; 

      ExifInterface exif = null; 
      try 
      { 
       exif = new ExifInterface(path); 

      int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); 
      Matrix m = new Matrix(); 

      if ((orientation == 3)) 
      { 
       m.postRotate(180); 
       m.postScale((float) bm.getWidth(), (float) bm.getHeight()); 
       bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),bm.getHeight(), m, true); 
       return bitmap; 
      } 
      else if (orientation == 6) 
      { 
       m.postRotate(90); 
       bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),bm.getHeight(), m, true); 
       return bitmap; 
      } 
      else if (orientation == 8) 
      { 
       m.postRotate(270); 
       bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),bm.getHeight(), m, true); 
       return bitmap; 
      } 

      return bitmap; 
      } 

      catch(Exception ex) {} 
    } 

    catch (FileNotFoundException e) {} 
    return null; 
} 
1

替代Bitmap.createBitmap(tmpBitmap,0,0,X,Y,矩陣,真正的); Bitmap.createBitmap(tmpBitmap,0,0,y,x,matrix,true);當你旋轉90度的圖像寬度=高度和高度=寬度