BitmapFactory.Options中有一个属性值是inDither,这个值表示是否采用抖动解码,那什么叫抖动解码呢?
Bitmap的解码是根据它所记录的节点,依照一定算法,来补充两个节点之间的数据,可以理解为补充其中像素点的颜色,那么在解码的时候肯定会和当前所采用的颜色模式有关,很直观的说,采用32位的肯定比16位的颜色要多,自然展现的图像会看起来更好。
如果一张颜色很丰富的图,用一个位数比较低的颜色模式来解码的话,那么一个直观的感觉就是颜色不够用,那么这张图解出来之后,在一些颜色渐变的区域上就会有一些很明显的断裂色带,这个很好解释,因为一些丰富的颜色在位数较低的颜色模式下并没有,那么只能用相近的填充,可能一大片都没有,那么一大片都用这一个颜色填充,就形成了断裂色带。
如果采用抖动解码,那么就会在这些色带上采用随机噪声色来填充,目的是让这张图显示效果更好,色带不那么明显。
看下面的例子:
很明显,左边(option.inDither = true)的更平滑一点,右边的会有一些色带,如果不想有这些色带,那么就需要采用抖动解码。