2015-07-08 2 views
0

В моем приложении я выбираю изображение из памяти или фотографирую с помощью камеры, и он будет установлен в изображение. При этом я получил ошибку «Из памяти», чтобы избегайте этого, я использовал этот метод. Но он не работает, может ли кто-нибудь помочь решить эту проблему. Кто может предложить любой другой метод для решения этой проблемы.Как избежать нехватки памяти Ошибка при обращении Imageviews

public void decodeFile(String filePath) { 
    // Decode image size 
    BitmapFactory.Options o = new BitmapFactory.Options(); 
    o.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(filePath, o); 

    // The new size we want to scale to 
    final int REQUIRED_SIZE = 1024; 

    // Find the correct scale value. It should be the power of 2. 
    int width_tmp = o.outWidth, height_tmp = o.outHeight; 
    int scale = 1; 
    while (true) { 
     if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE) 
      break; 
     width_tmp /= 2; 
     height_tmp /= 2; 
     scale *= 2; 
    } 

    // Decode with inSampleSize 
    BitmapFactory.Options o2 = new BitmapFactory.Options(); 
    o2.inSampleSize = scale; 
    bitmap = BitmapFactory.decodeFile(filePath, o2); 

    imgView.setImageBitmap(bitmap); 

} 
+0

похоже, что вы вызываете BitmapFactory.decodeFile дважды. Который загрузил бы ваше изображение в память дважды. Взгляните на: http://stackoverflow.com/questions/11681274/get-bitmap-width-and-height-without-loading-to-memory –

+0

Я получил этот код из учебника, вы можете проверить это утверждение if, и, пожалуйста, сделайте это правильно, если есть ошибка. Я не мог понять утверждение if (width_tmp < REQUIRED_SIZE & & height_tmp < REQUIRED_SIZE) break; – Gibs

+0

o.inJustDecodeBounds = false; добавьте это перед BitmapFactory.Options o2 = new BitmapFactory.Options(); – Piyush

ответ

0

Я бы предложил использовать библиотеку для обработки загрузки, кэширования и отображения изображений. Они просты в использовании, и вам не нужно заботиться об уменьшении размера изображения и т. Д.

В моих проектах я использую Universal Image Loader от nostra13. Это довольно просто реализовать и предлагает множество функций, таких как память и кэширование дисков. Вы должны попробовать.

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