2014-09-14 4 views
0

Я пытаюсь сделать игру, в которой мне нужно несколько раз поворачивать растровое изображение. Но иногда это показывает ошибку из памяти. Как решить эту проблему? Может ли кто-нибудь предложить мне способ переработать растровое изображение или любой другой выход. Это код, который я написал:Ошибка памяти при вращении изображения

 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() для compess растрового (опционально)

Смежные вопросы