decode图片时BitmapFactory.Options中的inDensity和inTargetDensity
来源:互联网 发布:js手写bind实现原理 编辑:程序博客网 时间:2024/06/01 10:09
BitmapFactory.Options中的inDensity和inTargetDensity
今天在写一个小软件的时候,加载一个bitmap,每次加载出来,发现比原图的宽高大了一倍…
后来经过一番搜索和调试,终于发现问题所在,本以为影响BitmapFactory的decode图片的大小的只有inSampleSize
事实证明我too young too simple,some times naive…..
BitmapFactory在decode的时候还会参考inDensity和inTargetDensity两个属性
因为我用的图片放在drawable文件夹中,所以
++Options中的inDensity属性会根据drawable文件夹的分辨率来赋值++
++inTartgetDensity会根据屏幕的像素密度来赋值++
对应关系如下
ldpi -----> 120mdpi -----> 160hdpi -----> 240xhdpi -----> 320xxhdpi -----> 480xxxhdpi -----> 640
**如果你放置图片的drawable文件夹后跟”-xxxhdpi”字样,
那么你decode这张图片时候inDensity属性就是640**
如果你用的手机是nexus4,那么你decode这张图片的时候inTargetDensity是320
//屏幕的density可由此代码获得,这个就是inTargetDensityDisplayMetrics metrics = new DisplayMetrics();WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);wm.getDefaultDisplay().getMetrics(metrics);int inTargetDensity = metircs.densityDpi;
最终:
输出图片的宽高= 原图片的宽高 / inSampleSize * (inTargetDensity / inDensity)
(注意inSampleSize只能是2的幂,如不是2的幂下转到最大的2的幂,而且inSampleSize>=1)
这个计算仅针对于drawable文件夹的图片来说
而对于一个file或者stream那么inDensity和inTargetDensity是不考虑的!他们默认就是0
自此我终于明白drawable为什么要分那么多中分辨率的文件夹了
如果将图片放入默认drawable文件夹(不指定分辨率,即文件夹名后不跟分辨率),则默认的inDensity就是160
- decode图片时BitmapFactory.Options中的inDensity和inTargetDensity
- android使用inSampleSize、inScaled、inDensity、inTargetDensity对图片进行缩放
- android使用inSampleSize、inScaled、inDensity、inTargetDensity对图片进行缩放
- android使用inSampleSize、inScaled、inDensity、inTargetDensity对图片进行缩放
- 使用BitmapFactory.Options处理图片时,BitmapFactory.decodeStream中的一些误区
- inDensity,inTargetDensity,inScreenDensity关系详解
- inDensity,inTargetDensity,inScreenDensity关系详解
- BitmapFactory.Options 图片解析
- BitmapFactory.Options压缩图片
- BitmpaFactory和BitmapFactory.Options详解及优化解码图片时使用的内存
- BitmapFactory.Options操作图片显示大小
- BitmapFactory.Options处理图片的缩放
- Android加载图片内存溢出BitmapFactory.Options
- 图片压缩--BitmapFactory.Options的使用
- 通过BitmapFactory.Options来缩放图片
- 内存加载图片压缩 BitmapFactory.Options
- BitmapFactory.Options
- BitmapFactory.Options
- Makefile 中:= ?= += =的区别
- Tyvj P1354 日历
- springmvc和struts2的区别
- 贪心-51nod 1091 线段的重叠
- golang
- decode图片时BitmapFactory.Options中的inDensity和inTargetDensity
- 运动时间
- Sublime Text 2使用教程一
- angular.js学习(2)--filter
- hdu ---2007做题笔记(c++)
- 一步一步DIY jQuery库2-使用es6模块化
- BOM(二)间歇调用和超时调用、BOM其他主要对象
- 95. Unique Binary Search Trees II
- 详解C与C++中操作字符串方法的不同