在使用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. IDEA打可执行jar包

    流程: 1. File ->Project Structure -> Artifacts -> + -> JAR -> From modules with depende ...

  2. sort 及lambda表达式定制排序

    void CDrawCircle::OnBnClickedBtnSelectinfo() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); BeginEditor ...

  3. [转载] Linux Futex的设计与实现

    Linux Futex的设计与实现 引子 在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正 ...

  4. Python Web开发

    参考原文 Python廖雪峰 WSGI接口 WSGI(Web Server Gateway Interface)是一个接口,用来屏蔽底部的细节(如TCP的建立连接,HTTP原始请求和响应格式等).WS ...

  5. mysql (5.7版本)---的配置

    1.去到官方网站下载 https://dev.mysql.com/downloads/installer/ 或者直接下载  -->  https://dev.mysql.com/get/Down ...

  6. Linux设置history命令显示行数以及时间

    Linux和unix上都提供了history命令,可以查询以前执行的命令历史记录但是,这个记录并不包含时间项目因此只能看到命令,但是不知道什么时间执行的如何让history记录时间呢? 解决方案 注意 ...

  7. python黑科技库:FuckIt.py,让你代码从此远离bug

    今天给你推荐的这个库叫 “FuckIt.py”,名字一看就是很黄很暴力的那种,作者是这样介绍它的: FuckIt.py uses state-of-the-art technology to make ...

  8. eshing wind/tidal turbine using Turbogrid

    Table of Contents 1. meshing wind turbine using Turbogrid 1.1. ref 1 meshing wind turbine using Turb ...

  9. Extract local angle of attack on wind turbine blades

    Extract local angle of attack on wind turbine blades Table of Contents 1. Extract local angle of att ...

  10. COJ 1156 Switching bulbs

    一道模拟题目 对于所有0 还是 1 我们都可以想象做均为 0 的状态 v[i]表示原来的值 但是对于原来为1的要加上其所在的值作为初始值 然后转化后 a[i] = -v[i]  , 如果原来为0 , ...