旋转图像时出现内存错误

时间:2014-09-14 13:22:25

标签: android out-of-memory bitmapimage recycle

我正在尝试做一个我必须多次旋转位图的游戏。但有时它会显示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);
      }

1 个答案:

答案 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()来压缩你的位图(可选)