[英]java.lang.OutOfMemoryError when trying to load a bitmap into imageView
[英]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.