美文网首页
处理图片过的造成ooM

处理图片过的造成ooM

作者: 安卓_背包客 | 来源:发表于2021-09-15 18:55 被阅读0次
 val options = BitmapFactory.Options()
            options.inJustDecodeBounds = true
            BitmapFactory.decodeResource(resources, R.drawable.a, options)
            val outWidth = options.outWidth
            val outHeight = options.outHeight

            val width = mainBinding.ivLoadImg.width
            val height = mainBinding.ivLoadImg.height
            Log.e("==","with=$width///height="+height)
            Log.e("==","outwidth=$outWidth+///+outheight=$outHeight")
            var inSmalpSize=1
            if (outWidth>width||outHeight>height){
                val round1 = Math.round(outWidth * 1.0f / width)
                val round2 = Math.round(outHeight * 1.0f / height)
                inSmalpSize  = Math.max(round1, round2)
            }
            options.inJustDecodeBounds=false
            options.inSampleSize=inSmalpSize
            Log.e("===","$inSmalpSize")
            val bitm = BitmapFactory.decodeResource(resources, R.drawable.a, options)
            mainBinding.ivLoadImg.setImageBitmap(bitm)
        }

关于Option 参数介绍

inJustDecodeBounds:

如果将这个值置为true,那么在解码的时候将不会返回bitmap,只会返回这个bitmap的尺寸。这个属性的目的是,如果你只想知道一个bitmap的尺寸,但又不想将其加载到内存时。这是一个非常有用的属性。

inSampleSize:

这个值是一个int,当它小于1的时候,将会被当做1处理,如果大于1,那么就会按照比例(1 / inSampleSize)缩小bitmap的宽和高、降低分辨率,大于1时这个值将会被处置为2的倍数。例如,width=100,height=100,inSampleSize=2,那么就会将bitmap处理为,width=50,height=50,宽高降为1 / 2,像素数降为1 / 4。

inPreferredConfig:

这个值是设置色彩模式,默认值是ARGB_8888,在这个模式下,一个像素点占用4bytes空间,一般对透明度不做要求的话,一般采用RGB_565模式,这个模式下一个像素点占用2bytes。

inPremultiplied:

这个值和透明度通道有关,默认值是true,如果设置为true,则返回的bitmap的颜色通道上会预先附加上透明度通道。

inDither:

这个值和抖动解码有关,默认值为false,表示不采用抖动解码。如果想知道什么是抖动解码,请参看我另一篇文章:http://blog.csdn.net/haozipi/article/details/47185535

inDensity:

表示这个bitmap的像素密度(对应的是DisplayMetrics中的densityDpi,不是density)。

inTargetDensity:

表示要被画出来时的目标像素密度(对应的是DisplayMetrics中的densityDpi,不是density)。

inScreenDensity:

表示实际设备的像素密度(对应的是DisplayMetrics中的densityDpi,不是density)。

inScaled:

设置这个Bitmap是否可以被缩放,默认值是true,表示可以被缩放。

ps:inDensity,inTargetDensity,inScreenDensity三个值的具体关系请参看我的另一篇文章:http://blog.csdn.net/haozipi/article/details/47185917

inPurgeable和inInputShareable:

这两个值一般是一起使用,设置为true时,前者表示空间不够是否可以被释放,后者表示是否可以共享引用。这两个值在Android5.0后被弃用。

inPreferQualityOverSpeed:

这个值表示是否在解码时图片有更高的品质,仅用于JPEG格式。如果设置为true,则图片会有更高的品质,但是会解码速度会很慢。

outWidth和outHeight:

表示这个Bitmap的宽和高,一般和inJustDecodeBounds一起使用来获得Bitmap的宽高,但是不加载到内存。

相关文章

  • 处理图片过的造成ooM

    关于Option 参数介绍 inJustDecodeBounds: 如果将这个值置为true,那么在解码的时候将不...

  • 性能优化

    问题:setImageResource()造成卡顿和oom解决方案:使用图片加载框架Glide加载图片

  • Android图片压缩——Luban鲁班压缩

    个人博客:haichenyi.com。感谢关注   Android让人头疼的OOM,造成OOM的原因之一就是图片,...

  • Bitmap与OOM

    Bitmap所造成的OOM 图片是一个很耗内存的资源,因此经常会遇到OOM。比如从本地文件中读取图片,然后在Gri...

  • Android图片压缩——Luban鲁班压缩

    Android让人头疼的OOM,造成OOM的原因之一就是图片,现在的手机像素越来越高,随便一张图片都是好几M,甚至...

  • 07.Android之多媒体问题

    目录介绍 7.0.0.1 加载bitmap图片的时候需要注意什么?为何bitmap容易造成OOM?如何计算Bitm...

  • 图片压缩技术

    对于一个应用或多或少的都会使用到图片,如果图片过大就会很吃内存,造成oom的。使用在使用图片的时候我们可以使用图片...

  • 处理图片会OOM(OutOfMemoryErrer)分析

    Android程序处理图片常常会OOM,有时候我们处理2、3M的图片就会内存溢出。但是我们的手机还有更多的运存。 ...

  • 2020-07-04

    anr、oom: 数据适配:格式 640*340,mmpeg视频处理库,opencv,opengl 灰度化图片:黑...

  • iOS-OOM

    什么是OOM?OOM一定会kill吗?怎么监控识别OOM?监控到了OOM怎么分析是谁造成的? 1、崩溃和OOM A...

网友评论

      本文标题:处理图片过的造成ooM

      本文链接:https://www.haomeiwen.com/subject/bmllgltx.html