Bitmap通过getWidth和getHeight获取尺寸不符
2015-08-15 12:29
429 查看
在使用BitmapFactory加载图片时,常会出现这种情况,返回的图片尺寸与实际尺寸不符。这是由于我们把图片资源放到res/drawable文件路径下时,选择的文件不同所致,不同的文件夹会有不同的缩放。
1、加载并显示图片
将70*98的图片放在res/drawable-hdpi中。
![](http://img.blog.csdn.net/20150815121942459)
这里尺寸和原图相同
2、修改文件存放路径
(1)放到res/drawable-mdpi下,运行效果如图
![](http://img.blog.csdn.net/20150815122007308)
这里尺寸放大了1.5倍
(2)放到res/drawable-xhdpi下,运行效果如图
![](http://img.blog.csdn.net/20150815122016275)
尺寸缩小了1.3倍
(3)放到res/drawable-xxdpi下,运行效果如图
![](http://img.blog.csdn.net/20150815122023666)
尺寸缩小了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
运行后你会发现,不论你将图片放在哪里,都是原尺寸。
参考文档:
http://www.eoeandroid.com/blog-633294-2751.html http://q.cnblogs.com/q/47175/
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/
相关文章推荐
- 第三次个人赛题目4
- 关于C++的虚拟函数
- 第三次个人赛题目3
- 第三次个人赛题目2 【多项式输出格式】
- HDU bfs
- TCP/IP协议学习之七(TCP的保活定时器keepalive选项)
- 学习SSO-1 Tomcat启用ssl(含有配置https时的异常解决)
- 服务器文件同步--scp同步
- 加载网页内容
- 无锁编程实例
- C++基础---变量
- 130. Surrounded Regions
- Pointers to classes (From the note of my firend)
- SpringMVC 解决GET请求时中文乱码的问题
- 第三次个人赛题目1【大数】
- Android系统修改时间格式为24小时制
- oracle用户创建及权限设置
- php学习笔记--trait的使用(为实现多继承产生)
- C语言中的声明和定义
- 多线程之三:NSThread