android bitmap getwidth,解决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)修改上述代码,设置缩放为falseBitmapFactory.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();

运行后你会发现,不论你将图片放在哪里,都是原尺寸。

补充知识:Android 获取drawable中图片的高度宽度

1.定义一个ImageData类如下:package com.example.vidarecyclerviewstagger;public class ImageData { private int resourceId; private int height; private int width; public ImageData(int resourceId,int height,int width){ this.resourceId = resourceId; this.height = height; this.width = width; } public int getResourceId() { return resourceId; } public void setResourceId(int resourceId) { this.resourceId = resourceId; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; }}

2.在drawable中放置一些图片:private static int[] imgRes = new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4, R.drawable.img5,R.drawable.img6,R.drawable.img7,R.drawable.img8, R.drawable.img9,R.drawable.img10,R.drawable.img11,R.drawable.img12, R.drawable.img13,R.drawable.img14,R.drawable.img15,R.drawable.img16};

3.获取每个图片的高度宽度并保存数据到mData中:private ArrayList mData = new ArrayList<>();public void InitData(){ for(int i = 0;i < imgRes.length;i++){ BitmapFactory.Options options = new BitmapFactory.Options(); BitmapFactory.decodeResource(getResources(),imgRes[i],options); //获取图片的宽高 int height = options.outHeight; int width = options.outWidth; Log.i("YYYY","图片的宽度:"+width+"图片的高度:"+height); ImageData imgData = new ImageData(imgRes[i],height,width); mData.add(imgData); }}

关键代码就这么几句:BitmapFactory.Options options = new BitmapFactory.Options();BitmapFactory.decodeResource(getResources(),imgRes[i],options);//获取图片的宽高int height = options.outHeight;int width = options.outWidth;

以上这篇解决Bitmap通过getWidth和getHeight获取尺寸不符的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值