2014-05-18 58 views
0

我想旋轉一個給定的位圖X度 爲了將它發送到我的服務器旋轉。java.lang.OutOfMemoryError當旋轉位圖

我使用的Android API8

使用此代碼:

private static void rotateBitmap(Bitmap source, float angle) { 
Matrix matrix = new Matrix(); 
matrix.postRotate(angle); 
return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, 
    true); 
    } 

它適用於Nexus 5,但對銀河注2,我得到以下錯誤:

05-18 09:06:42.696: E/AndroidRuntime(6044): java.lang.OutOfMemoryError 
05-18 09:06:42.696: E/AndroidRuntime(6044):  at android.graphics.Bitmap.nativeCreate(Native Method) 
05-18 09:06:42.696: E/AndroidRuntime(6044):  at android.graphics.Bitmap.createBitmap(Bitmap.java:726) 
05-18 09:06:42.696: E/AndroidRuntime(6044):  at android.graphics.Bitmap.createBitmap(Bitmap.java:703) 
05-18 09:06:42.696: E/AndroidRuntime(6044):  at android.graphics.Bitmap.createBitmap(Bitmap.java:636) 

比我已閱讀SOF中的一些帖子

並更改爲以下代碼:

private static void rotateBitmap(Bitmap source, float angle) { 

    Canvas canvas = new Canvas(source); 
    Matrix matrix2 = new Matrix(); 
    matrix2.setRotate(angle, source.getWidth()/2, source.getHeight()/2); 
    canvas.drawBitmap(source, matrix2, new Paint()); 
    } 

但後來我得到了以下錯誤:

Immutable bitmap passed to Canvas constructor

更新

然後我試圖將此代碼:

private static void rotateBitmap(Bitmap source, float angle) { 
// Matrix matrix = new Matrix(); 
// matrix.postRotate(angle); 
// return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, 
// true); 

// Bitmap workingBitmap = Bitmap.createBitmap(source); 

Bitmap mutableBitmap = source.copy(Bitmap.Config.ARGB_8888, true); 
source.recycle(); 
// Canvas canvas = new Canvas(mutableBitmap); 
Canvas canvas = new Canvas(); 

// Canvas canvas = new Canvas(source); 
Matrix matrix2 = new Matrix(); 
matrix2.setRotate(angle, mutableBitmap.getWidth()/2, mutableBitmap.getHeight()/2); 
canvas.drawBitmap(mutableBitmap, matrix2, new Paint()); 

}

,並得到這個錯誤:

05-18 09:42:17.906: E/AndroidRuntime(18788): java.lang.OutOfMemoryError 
05-18 09:42:17.906: E/AndroidRuntime(18788): at android.graphics.Bitmap.nativeCopy(Native Method) 
05-18 09:42:17.906: E/AndroidRuntime(18788): at android.graphics.Bitmap.copy(Bitmap.java:479) 

我該如何解決這個問題?

+0

請發佈完整的Logcat – Lal

+1

請參閱:http://stackoverflow.com/questions/13119582/android-immutable-bitmap-crash-error – Domin

+0

@Domin謝謝。請參閱我的更新 –

回答

0

您沒有回收所有位圖。 回收後,你必須刪除鏈接到位圖的所有指針。

+0

如何在java中刪除指針? –

+0

只需將Bitmap變量設置爲null即可。 – user3649141