1. 程式人生 > >Bitmap通過getWidth和getHeight獲取尺寸不符

Bitmap通過getWidth和getHeight獲取尺寸不符

pac coder sdn activit eight -s 設備 資源 factor

在使用BitmapFactory載入圖片時,常會出現這樣的情況,返回的圖片尺寸與實際尺寸不符。這是因為我們把圖片資源放到res/drawable文件路徑下時,選擇的文件不同所致。不同的目錄會有不同的縮放。

1、載入並顯示圖片

將70*98的圖片放在res/drawable-hdpi中。

public class MainActivity extends Activity {
	TextView tv_wl;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		tv_wl=(TextView)findViewById(R.id.tv_wl);
		Bitmap bm1=BitmapFactory.decodeResource(getResources(), R.drawable.img);
		int bm_width=bm1.getWidth();
		int bm_height=bm1.getHeight();
		tv_wl.setText("width="+bm_width+";    height="+bm_height);
	}	
}
執行結果例如以下圖所看到的:

技術分享這裏尺寸和原圖同樣

2、改動文件存放路徑

(1)放到res/drawable-mdpi下。執行效果如圖

技術分享這裏尺寸放大了1.5倍

(2)放到res/drawable-xhdpi下。執行效果如圖

技術分享尺寸縮小了1.3倍

(3)放到res/drawable-xxdpi下,執行效果如圖

技術分享尺寸縮小了2倍

3、尋找原因

電腦上圖片尺寸,單位是像素。Android手機的屏幕分ldpi、mdpi、hdpi,甚至還有xhdpi,對於mdpi(density=160)設備,1dp=1px。對於hdpi(density=240)的設備,1dp=1.5px。所以,把圖片放在了res/drawable-mdpi文件夾下。而執行的Android設備屏幕屬於hdpi,導致圖片尺寸會擴大1.5倍。


4、解決的方法

(1)如今的Android設備一般都在hdpi及以上,所以建議把圖片資源主要放在hdpi中。

(2)改動上述代碼。設置縮放為false

BitmapFactory.Options bfoOptions = new BitmapFactory.Options();
		bfoOptions.inScaled = false; 
		Bitmap img1 = BitmapFactory.decodeResource(getResources(), R.drawable.img, bfoOptions);
		int bm_width=img1.getWidth();
		int bm_height=img1.getHeight();


執行後你會發現。不論你將圖片放在哪裏,都是原尺寸。

參考文檔:

http://www.eoeandroid.com/blog-633294-2751.html

http://q.cnblogs.com/q/47175/

Bitmap通過getWidth和getHeight獲取尺寸不符