我正在尝试做一个我必须多次旋转位图的游戏。但有时它会显示Out Of Memory Error.How要解决这个问题?任何人都可以建议我回收位图或任何其他方法。这是我写的代码:
public void rotate() {
CustomImageView customImageView=this;
Bitmap bitmap = ((BitmapDrawable)customImageView.getDrawable()).getBitmap();
Matrix matrix = new Matrix();
matrix.setRotate(90, (float) bitmap.getWidth() / 2, (float) bitmap.getHeight() / 2);
try {
Bitmap b2 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
if (bitmap != b2) {
bitmap.recycle();
bitmap = b2;
}
} catch (OutOfMemoryError ex) {
System.out.println("Exception::out of memory in customimage");
throw ex;
}
customImageView.setImageBitmap(bitmap);
}
答案 0 :(得分:1)
虚拟机无法抛出OutOfMemoryError 分配一个对象,因为它没有内存,也没有更多的内存 可以由垃圾收集器提供。
你正在为每个旋转方法调用重新分配你的位图,试试这种方式
Bitmap bitmap = ((BitmapDrawable)customImageView.getDrawable()).getBitmap();
CustomImageView customImageView=this;
Matrix matrix = new Matrix();
public void rotate() {
matrix.setRotate(90, (float) bitmap.getWidth() / 2, (float) bitmap.getHeight() / 2);
try {
Bitmap b2 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
if (bitmap != b2) {
bitmap.recycle();
bitmap = b2;
}
} catch (OutOfMemoryError ex) {
System.out.println("Exception::out of memory in customimage");
throw ex;
}
customImageView.setImageBitmap(bitmap);
}
你也可以添加b2.compress()来压缩你的位图(可选)