我想旋轉一個給定的位圖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)
我該如何解決這個問題?
請發佈完整的Logcat – Lal
請參閱:http://stackoverflow.com/questions/13119582/android-immutable-bitmap-crash-error – Domin
@Domin謝謝。請參閱我的更新 –