2011-09-09 65 views
7

嗨,我從名爲image.png的PNG圖像創建一個位圖。圖像的尺寸爲75(寬)x 92(高)。當我運行這段代碼:BitmapFactory返回比源更大的圖像

Bitmap bitmap = BitmapFactory.decodeResource(this.context.getResources(), R.drawable.image 
Log.d("image", "height: " + bitmap.getHeight() + " width: " + bitmap.getWidth()); 

的記錄日誌:

DEBUG/image(3550): height: 138 width: 113 

和屏幕上的圖像是比有其他尺寸更大的圖像75×92我能做些什麼來讓Android用正確的尺寸加載圖像?

+0

可以在運行時獲得的繪製的高度和寬度(),在你的代碼? – user370305

回答

11

這聽起來像您的設備上的屏幕密度不同於創建image.png時的密度。

如果你真的想防止結垢,你可以嘗試以下操作之一:

  1. 把圖像在res /繪製-nodpi(http://developer.android.com/guide/practices/screens_support.html#qualifiers

  2. 使用ImageView.ScaleType。 CENTER(http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

  3. 剛剛發現的SO此相關的問題:Android: How to stop Android 1.6+ from scaling images

+0

第一個沒有影響任何東西,第三個對於來自網絡的圖像是真實的(我已經在使用它),第二個是解決方案!非常感謝 –

+1

「將圖像放在res/drawable-nodpi中」這對我來說非常適合使用options.OutWidth&options.OutHeight –

3

因爲BitmapFactory中的加載程序在加載過程中應用了屏幕密度縮放。 要重寫此內容,請在調用decodeResource的BitmapFactory.Options中提供自己想要的inTargetDensity。

+0

我找到了這些選項,但我希望圖像能夠在所有設備上正確加載,而不僅僅是一個密度。 –

+0

我假設你想在任何設備上加載原始像素大小,對吧? 如果您的圖像位於可繪製資源文件夾中,則設置inTargetDensity = 160,這是可繪製文件夾中資源的密度,並且在加載過程中不會發生縮放。 否則正確的答案可能取決於你的意思是「正確的尺寸」...... –

+0

各種可繪製res文件夾的默認密度值記錄在這裏:http://developer.android.com/guide/practices/screens_support.html –

18

我的解決辦法:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inScaled = false;    
Bitmap bitmap = BitmapFactory.decodeResource(this.context.getResources(), R.drawable.image, options);