如何从sdcard android加载不同大小的图像?

时间:2013-01-05 09:48:08

标签: android

我想从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的图像尺寸以及我不想做的其他图像。

2 个答案:

答案 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。