在使用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获取尺寸不符的更多相关文章

  1. Bitmap通过getWidth和getHeight获取尺寸不符 -- 误以为是Matrix失效(哈)

    参考:Bitmap通过getWidth和getHeight获取尺寸不符 因为项目需要我想做个这样的地图出来 这个图的的分辨率是1190 * 666的 在地图上定位,我底图是固定分辨率的,那么算个坐标就 ...

  2. BitmapFactory: 通过Bitmap的getWidth和getHeight方法获取到的尺寸与实际尺寸不符的问题

    问题 今天无意中发现了一个问题,通过Bitmap的getWidth和getHeight方法获取到的图片尺寸与实际的尺寸(1920*1080)不一致,后来更进一步发现,把这张图片分别放在raw.draw ...

  3. [[UIScreen mainScreen] bounds]获取尺寸不对

    http://www.cocoachina.com/bbs/read.php?tid-264373.html [[UIScreen mainScreen] bounds]获取尺寸不对       我在 ...

  4. Android Training精要(五)讀取Bitmap對象實際的尺寸和類型

    讀取Bitmap對象實際的尺寸和類型 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecode ...

  5. iOS根据图片url获取尺寸

    可以在UIImage的分类中加入下面的代码,并且引入系统的ImageIO.framework /** 根据图片的url获取尺寸 @param URL url @return CGSize */ + ( ...

  6. NX二次开发-获取尺寸的附加文本UF_DRF_ask_appended_text

    #include <uf.h> #include <uf_drf.h> #include <uf_obj.h> #include <uf_part.h> ...

  7. 【NX二次开发】获取尺寸信息UF_DRF_ask_draft_aid_text_info

    获取尺寸信息UF_DRF_ask_draft_aid_text_info 例如获取下面这三个的尺寸信息. 图1 输出结果: 10 <T+0.1!-0.1> 图2 输出结果: 10 < ...

  8. DOM系列---DOM获取尺寸和位置

    内容提纲: 1.获取元素CSS大小 2.获取元素实际大小 3.获取元素周边大小 本篇我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式. 一.获取元素CSS大小 1.通过style获取 ...

  9. 根据 label 的 text 的大小和长度 获取 尺寸

    NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:17]};CGSize size = [_cards ...

随机推荐

  1. 3星|《投机教父尼德霍夫的股票投机术》:2003年的书了。作者97年投机大亏后在CNBC《金钱》栏目上的股市评论文章集。

    查资料作者在97年金融危机中大亏,之后在CNBC<金钱>栏目上跟人合写股市评论文章,本书是那些股评文章的集合.有资料说作者在08年有一次大亏. 从这些文章看,作者是比较冷静地看待股市的,不 ...

  2. jQuery 遍历 - children() 方法

    jQuery 遍历参考手册 实例 找到类名为 "selected" 的所有 div 的子元素,并将其设置为蓝色: $("div").children(" ...

  3. Context Switches msdn

    Context Switches  https://msdn.microsoft.com/en-us/library/ms682105(VS.85).aspx The scheduler mainta ...

  4. 探索 DWARF 调试格式信息

    https://www.ibm.com/developerworks/cn/aix/library/au-dwarf-debug-format/ 简介 DWARF(使用有属性的记录格式进行调试 )是许 ...

  5. 牛客多校Round 9

    Solved:1 rank:112 E. Music Game 题解说有个非简化的原题 bzoj4318 #include <bits/stdc++.h> using namespace ...

  6. spring boot MongoDb配置和多数据源

    配置文件: # MongoDB配置项 mongodb.base.host: 192.168.1.204 mongodb. mongodb.base.database: xxx mongodb.base ...

  7. 简单了解jdbcTemplate的queryForList是如何查询

    queryForList方法会调用query方法,同时会传入一个新的ColumnMapRowMapper对象 ArgumentPreparedStatementSetter对象只有一个Object[] ...

  8. Maya Calendar POJ - 1008 (模拟)

    简述 注意260天的情况,这个地方还是0年 代码 #include <iostream> #include <map> #include <sstream> usi ...

  9. session--保持登录20分钟,常用与用户登录状态

    思路:request  与 session 两个作对比 1. . . 2. 3.

  10. Linux:iscsi存储服务器配置

    服务器添加4块硬盘 mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde 记下UUID值 mdadm -D /de ...