В моем приложении я выбираю изображение из памяти или фотографирую с помощью камеры, и он будет установлен в изображение. При этом я получил ошибку «Из памяти», чтобы избегайте этого, я использовал этот метод. Но он не работает, может ли кто-нибудь помочь решить эту проблему. Кто может предложить любой другой метод для решения этой проблемы.Как избежать нехватки памяти Ошибка при обращении 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);
}
похоже, что вы вызываете BitmapFactory.decodeFile дважды. Который загрузил бы ваше изображение в память дважды. Взгляните на: http://stackoverflow.com/questions/11681274/get-bitmap-width-and-height-without-loading-to-memory –
Я получил этот код из учебника, вы можете проверить это утверждение if, и, пожалуйста, сделайте это правильно, если есть ошибка. Я не мог понять утверждение if (width_tmp < REQUIRED_SIZE & & height_tmp < REQUIRED_SIZE) break; – Gibs
o.inJustDecodeBounds = false; добавьте это перед BitmapFactory.Options o2 = new BitmapFactory.Options(); – Piyush