Bitmap相关面试题

1、Bitmap 内存占用的计算

占用的内存 = width * height * nTargetDensity/inDensity * nTargetDensity/inDensity * 一个像素所占的内存。

  • ARGB_8888: 每个像素4字节. 共32位,默认设置。
  • Alpha_8: 只保存透明度,共8位,1字节。
  • ARGB_4444: 共16位,2字节。
  • RGB_565:共16位,2字节,只存储RGB值。

2、getByteCount() & getAllocationByteCount()的区别

  1. 不复用的情况
    如果不使用内存复用,这两个方法是一样的效果。
  2. 复用的情况
    在通过复用 Bitmap 来解码图片时,那么 getByteCount() 表示新解码图片占用内存的大 小,getAllocationByteCount() 表示被复用 Bitmap真实占用的内存大小。

可以认为:

  • getByteCount()只是图片的大小
  • getAllocationByteCount()是Bitmap的大小

因为Bitmap可以复用,所以Bitmap可以放入不同的图片,当Bitmap放入更大的图片的时候,就会占用更大的内存,但是这个时候如果对Bitmap对象进行复用,放入一张小图片,并不会改变Bitmap的大小。

举例说明:
比如,最初Bitmap放入一张大小为4M的图片,这个时候Bitmap占用了4M的内存,然后当这张图片使用完成之后,对Bitmap进行复用,放入一张1M的图片,这个时候其实只是复用了Bitmap之前内存大小的四分之一,如果使用getByteCount(),得到的其实就是1M,但是这个时候Bitmap对象实际占用内存其实还是4M,虽然对Bitmap进行了复用,但是并不会因为放入的图片变小了而改变了原本Bitmap对象占用内存的大小,所以getAllocationByteCount()返回的是4M。

3、Bitmap的压缩方式

  1. 质量压缩:内存不变,压缩转化后的 bytes.length 减少,适用于传输,png 无效
  2. 采样率压缩(Options):改变宽高,减少像素,采用一定的采样算法
  3. 缩放法压缩(Matrix):改变宽高,减少像素,采用一定的缩放算法(数字图像处理相关)
  4. RGB_565:改变字节数

4、LruCache & DiskLruCache原理

LruCache与DiskLruCache

5、如何设计一个图片加载框架

如何设计一个图片加载框架

6、有一张非常大的图片,如何去加载这张大图片

大图片处理

7、如果在hdpi、xxhdpi下放置了图片,加载的优先级。如果是400800,10801920,加载的优先级

链接

优先会去更高密度的文件夹下找这张图片,我们当前的场景就是drawable-xxxhdpi文件夹,然后发现这里也没有android_logo这张图,接下来会尝试再找更高密度的文件夹,发现没有更高密度的了,这个时候会去drawable-nodpi文件夹找这张图,发现也没有,那么就会去更低密度的文件夹下面找,依次是drawable-xhdpi -> drawable-hdpi -> drawable-mdpi -> drawable-ldp

0dpi ~ 120dpi ldpi

120dpi ~ 160dpi mdpi

160dpi ~ 240dpi hdpi

240dpi ~ 320dpi xhdpi

320dpi ~ 480dpi xxhdpi

480dpi ~ 640dpi xxxhdpi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值