0

携帯電話のカメラを使用して写真をキャプチャし、それをイメージビューに設定します。メモリ不足エラーが発生したため、次のコードを使用してビットマップを圧縮することにしました。エラーはなくなりましたが、私のビットマップも同様です。imageviewに何も表示されません。私は何が間違っているのですか。次のコードは私のonActivityResultにあります。

InputStream input = getContentResolver().openInputStream(
                            data.getData());
                    //Decode image size
                        BitmapFactory.Options o = new BitmapFactory.Options();
                        o.inJustDecodeBounds = true;
                        BitmapFactory.decodeStream(input,null,o);

                        //The new size we want to scale to
                        final int REQUIRED_SIZE=40;

                        //Find the correct scale value. It should be the power of 2.
                        int scale=16;
                        while(o.outWidth/scale/2>=REQUIRED_SIZE && o.outHeight/scale/2>=REQUIRED_SIZE)
                            scale*=2;

                        //Decode with inSampleSize
                        BitmapFactory.Options o2 = new BitmapFactory.Options();
                        o2.inSampleSize=scale;
                        bitmap=BitmapFactory.decodeStream(input, null, o2);

                        firstImageButton.setImageBitmap(bitmap);
4

1 に答える 1

2

同様のルーチンの作業を終えたところです。それ以外の場合はストリームの先頭に再配置されないため、decodeStreamへの2つの呼び出しの間に入力ストリームを閉じてから再度開く必要があることがわかりました。

また、decodeStreamの2回目の呼び出しに新しいBitmapFactory.optionsを使用する必要はありません。単に、o.inJustDecodeBoundsをfalseおよびo.inSampleSize = scaleに設定し、o2の代わりに使用します。

InputStream input = getContentResolver().openInputStream(data.getData());

//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(input,null,o);
input.close();

//The new size we want to scale to
final int REQUIRED_SIZE=40;

//Find the correct scale value. It should be the power of 2.
int scale=16;
while(o.outWidth/scale/2>=REQUIRED_SIZE && o.outHeight/scale/2>=REQUIRED_SIZE)
    scale*=2;

//Decode with inSampleSize
input = getContentResolver().openInputStream(data.getData());
o.inJustDecodeBounds=false;
o.inSampleSize=scale;
Bitmap bitmap=BitmapFactory.decodeStream(input, null, o);

firstImageButton.setImageBitmap(bitmap);
于 2012-12-10T08:10:24.760 に答える