我想从SD卡加载4mb,19mb,3mb大小的图像进入图像视图。
BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds=true;
InputStream inputStream=new BufferedInputStream(new FileInputStream(fileName));
options.inSampleSize=2;
options.inJustDecodeBounds=false;
Bitmap bmp=BitmapFactory.decodeFile(fileName,options);
当我使用此代码时,我无法获得所有图像的确切大小。根据屏幕功能,图像应该加载。如果屏幕具有加载19mb图像的能力,那么我不想使用option.insampleSize = 2。如果没有那个,那个时候我只想减少18Mb的图像尺寸以及我不想做的其他图像。
答案 0 :(得分:0)
你可以做那样的事情
int sampleSize = 1;
while (true) {
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = sampleSize;
options.inJustDecodeBounds = false;
InputStream inputStream = new BufferedInputStream(new FileInputStream(fileName));
Bitmap bmp=BitmapFactory.decodeFile(fileName,options);
// some code here
break;
} catch (OutOfMemoryError oom) {
sampleSize++;
}
}
答案 1 :(得分:0)
您可以动态请求屏幕尺寸
int screenSize = (resources.getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK);
DisplayMetrics metrics = resources.getDisplayMetrics();
然后使用
metrics.widthPixels, metrics.heightPixels
或
if (screenSize == Configuration.SCREENLAYOUT_SIZE_SMALL) // or another constant screen sizes in Configuration class.
请求图像大小而不使用图像的URI加载整个图像:
InputStream input = contentResolver.openInputStream(uri);
BitmapFactory.Options onlyBoundsOptions = new BitmapFactory.Options();
onlyBoundsOptions.inJustDecodeBounds = true;
BitmapFactory.decodeStream(input, null, onlyBoundsOptions);
input.close();
int originalHeight = onlyBoundsOptions.outHeight;
int originalWidth = onlyBoundsOptions.outWidth;
然后在运行时选择inSampleSize。