0

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の画像と、そのようにしたくない他の画像のサイズを小さくしたいだけです。

4

2 に答える 2

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++;
    }
}
于 2013-01-05T09:59:08.130 に答える
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 を選択します。

于 2013-01-05T10:00:27.470 に答える