簡體   English   中英

旋轉位圖時出現java.lang.OutOfMemoryError

[英]java.lang.OutOfMemoryError when rotating a bitmap

我試圖將給定的位圖旋轉X度,以便將其發送到旋轉的服務器。

我正在使用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,但在Galaxy Note2上出現以下錯誤:

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)

我怎樣才能解決這個問題?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM