Я знаю, что это старый пост, но я потратил много времени на эту проблему, поэтому вот мое решение.
Я хотел отобразить изображение 2000 × 3000, но мне не хватило памяти, или изображение былослишком большой для отображения.
Для начала я получаю размеры изображения:
o = new BitmapFactory.Options();
o.inJustDecodeBounds=true;
pictures = BitmapFactory.decodeStream(new FileInputStream(f), null, o);
Затем я разрезал его на четыре части и отобразил их с четырьмя ImageViews.Я попытался загрузить полную картинку и разрезать ее на четыре (используя BitmapFactory.create(bitmap,int,int,int,int)
), но снова вышел из памяти.
Поэтому я решил использовать BitMapRegionDecoder:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
ImageView iv = new ImageView(this);
InputStream istream = null;
try {
istream = this.getContentResolver().openInputStream(Uri.fromFile(f));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
BitmapRegionDecoder decoder = null;
try {
decoder = BitmapRegionDecoder.newInstance(istream, false);
} catch (IOException e) {
e.printStackTrace();
}
int nw = (j*width/k);
int nh = (i*height/k);
Bitmap bMap = decoder.decodeRegion(new Rect(nw,nh, (nw+width/k),(nh+height/k)), null);
iv.setImageBitmap(bMap);
}
}
Это сработало.