1.  BitmapFactory.Option 在我们创建bitmap的时候,特别处理OOM的时候经常会用到,最近做了一下,总结,贴出来,方便使用使用
参数介绍: BitmapFactory.Options.inPurgeable :如果设置为ture,则表示创建的bitmap在内存不足的情况下,可以被回收,如果再次调用,则重新decode  和
inInputShareable一起使用,可以使用inInputShareable设置的共享流一起或者数据复制生成新的图片,避免重新decode
BitmapFactory.Options.inInputShareable : 如果inPurgeable设置为false,则忽略,只有当inPurgeable设置为ture才有效。目的是设置bitmap是否可以共享数据比如inputstream,array等,需要深度克隆
BitmapFactory.Options.inPreferredConfig :指定bitmap保存或者编码格式,直接决定内存大小。可以设置的值: Bitmap.Config.ARGB_8888:这个是android系统默认的格式,每个像素占用的内存是:4个字节,ARGB,各占一个1字节,既8位。占用的内存大小是:W*H*4 ,就是加载到app中占用的内存大小。理解方式:4个8, Bitmap.Config.ARGB_4444:每个像素占用2个字节,ARGB,各占4位,这个已经被android抛弃,内存占用大小:W*H*2,理解方式:4个4, Bitmap.Config.RGB_565:这个比较特除,每个像素占2个字节,没有A,R:5位,G:6 B:5,立即方式同样。 Bitmap.Config.ALPHA_8:每个像素用一个字节,保存为透明的 如果将config设置为null,那么系统会按照最合适的格式去解码图片,这个应该是效果最好的,但是也是最耗费内存。Android默认使用:ARGB_8888
   BitmapFactory.Options.inDither:是否设置抖动处理,具体什么是抖动处理,还没搞明白
   BitmapFactory.Options.inMutable:如果为true,则返回一个可以调用setpixel设置每个像素颜色的bitmap,否则调用setpixel会crash。
   BitmapFactory.Options.inJustDecodeBounds: 如果设置为true,则不解析图片的实际占用的内存,只间隙一下out相关的变量值,比如:w和h,这样就可以更加w和h以及自己想要的大小,计算inSampleSise,对图片进行缩放处理,可以有效的减少内存
   BitmapFactory.Options.inSampleSize :这个值指定了在decodebitmap的时候,长宽两个方向上像素缩小的倍数。小于1时,就会放大(同时decode会把这个值当做1来处理)。如果大于1(必须是2的幂,否则会找最近的2的幂)时,就会缩小,比如,原图:100*100,该设置为2,那么缩放后的图片就是:50*50,内在大小缩小了1/4,网上流传各种计算合适的inSampleSise的方法
   BitmapFactory.Options.inPremultiplied:如果设置了true(默认是true),那么返回的图片RGB都会乘以A的颜色,比如:(a,r,g,b)读取出来的就是:(a,ar,ag,ab),这个也是ALPHA处理的一个算法,API建议:如果bitmap要作为view系统或者canvas使用,不建议设置为false,否则会抱出异常
   BitmapFactory.Options.inDensity :位图片设置屏幕密度,即每英寸有多少个像素,但是如果INScaled设置了,同时inDensity的值和inTargetDensity不同时,这个时候图片将缩放位inTartgetDensity指定的值,如果设置为0,则BitmapFactory.decodeResource(Resources,int)和BitmapFactory.decodeResource(Resources, int,BitmapFactory.Options),decodeResourceStream(Resources,TypedValue, InputStream, Rect, BitmapFactory.Options) 将inTargetDensity用DisplayMetrics.densityDpi来设置,其它函数则不会对bitmap进行任何缩放。
  BitmapFactory.Options.inTargetDensity: 这个设置目标手机的density,也就是最合理的density。和InScaled,Indensity一起使用,主要是为了对图片进行缩放。如果设置为0, BitmapFactory.decodeResource(Resources,int)}, BitmapFactory.decodeResource(Resources, int, BitmapFactory.Options)},BitmapFactory.decodeResourceStream这三个将按照DisplayMetricx的density处理,其----他不做缩放处理
      BitmapFactory.Options.inScreenDensity :InDensity,InTargetDensity,inScreenDensity主要是确定是否需要对bitmap进行缩放处理,如果缩放,缩放后的W和H应该是多少,缩放比例主要是通过:InTaargetDenisity/inDensity作为缩放比例。这个值不太明白,看API像是如果设置了,就相当于自己控制完成控制图片的density。没太搞明白这个东西,
   BitmapFactory.Options.inScaled :如果设置为ture,且indensity和inTargetDensity不为0,则图片将根据IntargetDensity进行缩放,而不依赖图片系统每次绘制的时候缩放,也就是在decode的时候就进行了缩放处理

   BitmapFactory.Options.inPreferQualityOverSpeed :如果设置了,decode将以牺牲性能而提高图片的质量,这个值只有在解析JPEG的时候才有作用
   BitmapFactory.Options.outWidth,outHeight,outMimeType
:这几个值,只有设置inJustDecodeBounds的时候才设置的,可以通过这写值,对图片进行缩放处理,以减少内存消耗

差不多就这些吧


android 获取状态栏高度

int in = getResources().getIdentifier("status_bar_height", "dimen", "android");int result = getResources().getDimensionPixelSize(in);

更多相关文章

  1. OkHttpClient加载图片给DisposableObserver,CompositeDisposable
  2. Hardcoded string "下一步", should use @string resource警告
  3. Android(安卓)RadioGroup中设置默认选中RadioButton 后,选中两个
  4. Android:异步加载网络资源
  5. Android自定义圆形图片
  6. android 利用FloatActionButton悬浮按钮实现扇形折叠与隐藏
  7. Android中使用fresco加载图片
  8. 【转】Windows下设置Android模拟器上网
  9. android的 各种权限,有个印象就好

随机推荐

  1. TaskBuilder如何实现低代码开发?
  2. JavaWeb 图书管理系统
  3. 智能停车场云平台需求分析
  4. 基于PG数据库插件的SQL规范审核工具
  5. Linux下性能压测之系统参数调优
  6. 5.0 Ansible 组织Playbook角色
  7. DevOps与传统的融合落地实践及案例分享
  8. Vue.js 基础入门系列(一)环境搭建
  9. 驱动器中的磁盘未被格式化. 不知道怎样寻
  10. Vue.js基础入门系列(二)数据绑定