码迷,mamicode.com
首页 > 其他好文 > 详细

Bitmap通过getWidth和getHeight获取尺寸不符

时间:2015-08-15 13:35:32      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:android   bitmap   getwidth   getheight   

在使用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

<span style="white-space:pre">		</span>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获取尺寸不符

标签:android   bitmap   getwidth   getheight   

原文地址:http://blog.csdn.net/renwudao24/article/details/47680789

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!