2012-12-10 79 views
0

我用我的手機相機捕捉圖片,然後將其設置爲我的imageview。我得到一個內存不足的錯誤,所以我決定使用下面的代碼來壓縮我的位圖。錯誤消失了,但我的位圖也一樣。我的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); 

回答

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); 
+0

非常感謝。 – AndroidDev

+0

不客氣。那麼這是你的問題的答案嗎? –