0

我用我的手机相机拍摄一张照片,然后将其设置为我的图像视图。我遇到了内存不足的错误,所以我决定使用下面的代码来压缩我的位图。错误消失了,但我的位图也消失了。我的图像视图不显示任何内容。我究竟做错了什么。以下代码在我的 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 之间关闭然后重新打开我的输入流,否则它不会重新定位到流的开头。

此外,您不需要在第二次调用 decodeStream 时使用新的 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 回答