2015-05-02 1 views
1

Я сделал демонстрацию для редактирования изображений, я сталкиваюсь с проблемой, когда я передаю изображение в другое действие (разрастается размер кучи), и мое приложение разбилось. Скажите, пожалуйста, как образец cani и изменить размер моего растрового изображения напрямую (а не из ресурсов) решить проблему памяти, мой код, как показано ниже: кодкак пробовать растровое изображение для управления памятью в android?

if (Global.photo_editor_bitmap != null) { 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       Global.photo_editor_bitmap.compress(Bitmap.CompressFormat.PNG, 
         100, stream); 
       byte[] byteArray = stream.toByteArray(); 

       i = new Intent(PhotoEditor.this, Enhance.class); 
       i.putExtra("bitmap_image", byteArray); 
       i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
       i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(i); 
      } else { 

       Toast.makeText(getApplicationContext(), "No Image", 1).show(); 
      } 

    static int calculateInSampleSize(BitmapFactory.Options options, 
      int reqWidth, int reqHeight) { 
     int inSampleSize = 1; // Default subsampling size 
     // See if image raw height and width is bigger than that of required 
     // view 
     if (options.outHeight > reqHeight || options.outWidth > reqWidth) { 
      // bigger 
      final int halfHeight = options.outHeight/2; 
      final int halfWidth = options.outWidth/2; 
      // Calculate the largest inSampleSize value that is a power of 2 and 
      // keeps both 
      // height and width larger than the requested height and width. 
      while ((halfHeight/inSampleSize) > reqHeight 
        && (halfWidth/inSampleSize) > reqWidth) { 
       inSampleSize *= 2; 
      } 
     } 
     return inSampleSize; 
    } 

    static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, 
      int reqWidth, int reqHeight) { 
     // First decode with inJustDecodeBounds=true to check dimensions 
     final BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inJustDecodeBounds = true; 
     BitmapFactory.decodeResource(res, resId, options); 
     // Calculate inSampleSize 
     options.inSampleSize = calculateInSampleSize(options, reqWidth, 
       reqHeight); 
     // Decode bitmap with inSampleSize set 
     options.inJustDecodeBounds = false; 
     return BitmapFactory.decodeResource(res, resId, options); 
    } 

Я получил решение decodebitmapFromresources, Но мой растровый доступен, SO, как использовать этот direclty.

ответ

0

У меня такая же проблема, что приложение получает сбой и показывает сообщение в журнале для размера кучи, размера выделения и размера растрового изображения, то, что я сделал, проверяется ширина устройства & height и на основе этого масштабируется растровое изображение или вычисляется размер образца.

int screenHeight = getResources().getDisplayMetrics().heightPixels; 
int screenWidth = getResources().getDisplayMetrics().widthPixels; 

получить ширину и высоту, а затем положить его в reqWidth и reqHeight

+0

Привет, спасибо за ответ, но я не знаю, как передать мое растровое изображение в функции, decodeSampledBitmapFromResource, поскольку для этого требуется ресурс и у меня есть уже растровое изображение доступно. Как передать его растровое изображение? –

+0

Как вы храните растровое изображение в Global.photo_editor_bitmap ??? потому что вы отправляете это растровое изображение как byteArray в другое действие – Pankaj