2012-01-13 73 views
6

我在我的android應用程序中將have.png圖像文件存儲爲資源。 在我的代碼,我從圖像如下allocationg新Bitmap實例:使用位圖時Android中的圖像尺寸不正確

Bitmap img = BitmapFactory.decodeResource(getResources(), R.drawable.imgName); 

但是,當我讀了位圖對象使用getWight()和getHeight()方法,圖像尺寸,

int width = img.getWidth(); 
int height = img.getHeight(); 

我從原始圖像中得到了不同的結果......有人可以解釋我缺少什麼,以及如何檢索圖像大小?

(我的項目是符合了Android 2.2 - API 8)

編輯: 好吧 - 發現瞭如何獲得真正的維度: 設置BitmapFactory.OptionsinJustDecodeBounds屬性爲true如下:

現在
BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeResource(getResources(), R.drawable.imgName, options); 
    width = options.outWidth; 
    height = options.outHeight; 

的問題是,解碼器,當我們發送Options參數返回空值,所以我需要再次解碼像以前一樣(不Options參數...)來檢索Bitmap例如-bizarre,是不是?

回答

3

Android會根據不同的密度(針對不同的屏幕分辨率和尺寸)縮放您的圖像。在drawable-ldpi,drawable-hdpi,drawable-xhdpi,drawable文件夾中放置圖像的單獨副本。

+0

謝謝您的回答,但你知道,如果有一個獲得「真實」圖像尺寸的方法? – 2012-01-13 18:30:45

+0

@ET最簡單的方法是對它進行硬編碼。無論如何,你會知道你已經放入可繪製文件夾的圖像的大小。坦率地說,我還沒有試圖得到真正的大小 – manjusg 2012-01-13 18:41:52

+1

我不能使用這種解決方案,因爲圖片是非常動態的,他們可能會在未來從Web服務檢索。此外 - 我有很多圖片:) – 2012-01-13 19:17:28

8

爲了得到準確的資源使用的圖像:

BitmapFactory.Options o = new Options(); 
    o.inScaled = false; 
    Bitmap watermark = BitmapFactory.decodeResource(context.getResources(), id, o); 

這將關閉自動屏幕密度縮放。

更新: 我相信你現在已經意識到了這一點,但是在JustDecodeBounds就是這麼做的,它找到了尺寸。你不會得到一個圖像。該選項通常用於執行自定義縮放。你最終會調用decodeResource兩次,第二次時間設定:

options.inJustDecodeBounds = false; 

,使任何選項調整基於您:

width = options.outWidth; 
height = options.outHeight; 
+0

可能不是OP正在尋找的東西,但它確實幫了我很多,謝謝。 – r41n 2014-06-25 13:12:53

+0

非常感謝你這對我來說非常有用! – noobcoder 2015-02-19 09:59:27