2015-05-07 4 views
-3

Как увеличить масштаб растрового изображения я получает из памяти исключенияИз памяти при создании растрового изображения в андроиде

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
      bitmap.setPixels(pixels, 0, width, 0, 0, width, height); 
      return bitmap; 

Как решить эту проблему?
Ниже ошибка я получаю

05-07 13: 13: 30.329: E/dalvikvm-кучи (17186): Из памяти на распределения 8294416 байт. 05-07 13: 13: 30.339: E/AndroidRuntime (17186): FATAL EXCEPTION: main 05-07 13: 13: 30.339: E/AndroidRuntime (17186): Процесс: com.example, PID: 17186 05-07 13: 13: 30.339: E/AndroidRuntime (17186): java.lang.OutOfMemoryError 05-07 13: 13: 30.339: E/AndroidRuntime (17186): at android.graphics.Bitmap.nativeCreate (Native Method) 05 -07 13: 13: 30.339: E/AndroidRuntime (17186): at android.graphics.Bitmap.createBitmap (Bitmap.java:819) 05-07 13: 13: 30.339: E/AndroidRuntime (17186): at android.graphics.Bitmap.createBitmap (Bitmap.java:796) 05-07 13: 13: 30.339: E/AndroidRuntime (17186): at android.graphics.Bitmap.createBitmap (Bitmap.java:763) 05- 07 13: 13: 30,339: E/AndroidRuntime (17186): в com.example.QRCode.encodeAsBitmap (QRCode.java:135)

+0

Вы можете попробовать использовать метод createScaledBitmap() из Bitmap и использование don't слишком больших изображений .... – Opiatefuchs

+0

Может быть, ваши растровый слишком велик. или вы можете попробовать [largeheap] (http://developer.android.com/guide/topics/manifest/application-element.html#largeHeap), может потребоваться большой путь, но вы должны позволить битмапу меньше. –

ответ

2

Load уменьшенная версия этого растрового изображения в памяти. Проведение короткого исследования Google проведет вас по этому вопросу Loading Large Bitmaps Efficently. Там у них есть этот пример код:

public static int calculateInSampleSize(
      BitmapFactory.Options options, int reqWidth, int reqHeight) { 
    // Raw height and width of image 
    final int height = options.outHeight; 
    final int width = options.outWidth; 
    int inSampleSize = 1; 

    if (height > reqHeight || width > reqWidth) { 

     final int halfHeight = height/2; 
     final int halfWidth = width/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; 
} 

public 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); 
} 
+0

В моем случае я генерирую qrcode его динамическое не из папки с возможностью рисования – andy

+0

, так в каком формате? –

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