2016-07-15 163 views
1

儘管我試圖在ImageView中獲取像素的圖像尺寸,但我發現它的寬度比原始jpg文件寬度多3倍。在ImageView中獲取圖像尺寸(以像素爲單位)

我把一個尺寸爲800 x 600的jpg文件,但下面的代碼顯示寬度爲2400。

Bitmap bitmap = ((BitmapDrawable)imgv.getDrawable()).getBitmap(); 
float fwidth = bitmap.getWidth(); 
Log.d("width0", Float.toString(fwidth)); 

我再次檢查了JPG文件大小,但它沒有改變(800×600), 我還尋找一個解決方案,但上面的代碼顯示在其他用戶的體驗的位圖的正確尺寸。

我做了什麼不正確? 任何人都可以給我一些建議嗎?

感謝您的幫助。

+0

'我做錯了什麼?'沒有。您可能會拉伸您的ImageView以適應其容器的寬度。 –

回答

1

這是在一個網站找到了解決辦法。

我需要更改選項值,當我解碼資源不縮放原始圖像。我不得不使用decodeResource函數的三個參數,而不是兩個。

當然,第三個參數是Options指定原始位圖不被縮放。所以現在我可以在調用位圖的getWidth()函數時獲得800。

   Resources res = getResources(); 
       int id = R.drawable.map10; 
       BitmapFactory.Options options = new BitmapFactory.Options(); 
       options.inScaled = false; 
//    options.inSampleSize = 3; 
       Bitmap bb = BitmapFactory.decodeResource(res, id, options); 

       float fwidth = bb.getWidth(); 
0

確保,您ImageView設置爲: heightWRAP_CONTENT widthWRAP_CONTENT scaleType

+1

...這是我在評論中已經說過的。 –

+0

我按照你的指示,wrap_content和沒有比例類型,謝謝,但它仍然是一樣的。此外,我使用setImageMatrix,getImageMatrix和matrix.postScale通過手指縮放圖像。我需要刪除這些代碼嗎?我擔心這些正在改變ImageView的縮放類型。 (像我用setScaleType()) – Solek

+0

是的,我認爲如果你刪除然後,你會得到正確的圖像大小 –