2012-08-13 2 views
-5

Я попытался отправить изображение на Facebook стене моего андроида application.For этого я создал битовый массив из layout.Here моего кодOutOfMemoryException при использовании больших изображений

    System.gc(); 
      Bitmap bitmap = Bitmap.createBitmap(
        view.getMeasuredWidth(), 
        view.getMeasuredHeight(), 
        Bitmap.Config.ARGB_8888); 
      Canvas canvas = new Canvas(bitmap); 
      Drawable bgDrawable = newLinearLayout.getBackground(); 
      if (bgDrawable != null) 
       bgDrawable.draw(canvas); 
      else 
       canvas.drawColor(Color.WHITE); 
      view.draw(canvas); 
      Matrix matrix = new Matrix(); 
      // resize the bit map 
      matrix.postScale(1.0f, 1.0f); 

      // recreate the new Bitmap 
      Bitmap resizedBitmap = null; 
      resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, 
        bitmap.getWidth(), bitmap.getHeight(), matrix, true); 
      //Canvas resizedCanvas = new Canvas(resizedBitmap); 

      if (bitmap != null) { 
       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       resizedBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
       Bundle parameters = new Bundle(); 
       byte[] data = baos.toByteArray(); 
       parameters.putByteArray("picture", data); 
       DataKeeper.getInstance().setBundleToPost(parameters); 

      } 
      bitmap.recycle(); 

Это показывает OutOfMemory исключения .I знаете, что это связано с тем, что размер изображения превышает его доступный размер. Как я могу изменить размер изображения без потери его качества?? Я попытался исправить это, используя BitmapFactory.Options. Но не работает. Как можно решить это исключение?

С уважением Asha

+0

возможно дубликат [Android: Strange из выпуска памяти во время загрузки изображения на объект Bitmap] (HTTP: //stackoverflow.com/questions/477572/android-strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object) –

ответ

0

использовать это:

BitmapFactory.Options options=new BitmapFactory.Options(); 
options.inSampleSize = 8; 
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options); 

более подробно смотрите по этой ссылке

link

+0

Я хочу растровое изображение моего макета. В таком ситуация, как я могу использовать Bitmap preview_bitmap = BitmapFactory.decodeStream (is, null, options); –

0

Идея @Zaz Gmy правильно,
однако я дон Не думайте, что значение inSampleSize должно быть постоянным (8) для каждого ima GE.

Это, конечно, будет работать, но масштабирование различных изображений с различными разрешениями на одном и том же масштабном коэффициенте = 8 приведет к тому, что некоторые изображения будут иметь видимую потерю качества.

Вместо этого необходимо создать inSimpleSize на основе целевого width и height изображения.

Android documentation содержит хорошую статью о том, как справиться с этой проблемой.

+0

Но это еще один вопрос, не связанный с этой нитью. В любом случае, просмотрите эту тему о том, как сохранить растровое изображение из вашего контента: http://stackoverflow.com/questions/2174875/android-canvas-to-jpg –

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