在进行色彩格式转换的时候,经常会遇到色彩量化位数的改变,比如说从 24bit RGB888 到 16bit RGB565 的色彩转换。所谓量化压缩与量化补偿都是我个人所提出的概念,现说明如下。
量化压缩,举例:
量化补偿,举例:
说明:第二行的 24bit RGB888 数据为转换后,未进行补偿的数据,在精度上会有损失;第三行的 24bit RGB888 数据为经过量化补偿的数据,对低位做了量化补偿可以很容易的证明,这样的补偿方法是一种合理的线性补偿。
补偿的原理很简单,大家仔细想一下就明白了,因此不再详细说明。
总结一下:量化压缩的方法:三个字取高位
量化补偿的方法:
1. 将原数据填充至高位
2. 对于低位,用原始数据的低位进行补偿
3. 如果仍然有未填充的位,继续使用原始数据的低位进行循环补偿
解释一下循环补偿的概念:
看了这个,应该明白则么回事了吧,其中B分量,进行了四轮的补偿,达到要求。
量化补偿的必要性,从直觉上讲,我所提出的这种补偿方法是正确的(因为我并没有严格的去证明),进行这样的补偿,在做色彩各式转换的时候,能够明显的改善色彩效果,减少精度上的损失。
对256色调色板模式的认识和应用,顺便讲一下这个,因为量化压缩和量化补偿刚好可以应用到调色板模式下。大家都知道,很早以前就有人提过出256色的标准调色板的概念(有的人又称之为抖动调色板或者万能调色板),其实这样的调色板并不神秘。256色中,一个像素点用8bit表示,那么如果采用 8bit RGB332 的格式,一切问题都可以想通,并且可以进行很好的处理了。对于每个 RGB332 的颜色,都可以使用量化补偿的做法,将其转换为 24bit RGB888 的颜色格式,然后将其设置为调色板即可。这样,实质上是将256色调色板模式,转换为了 8bit RGB332 的像素格式。这样的调色板方式,更加利于某些方面的处理,比如调色板匹配、Alpha混合等。由于采用了这样的方法,一个像素点的颜色值,与其实际的RGB颜色值,可以很方便的通过量化补偿的方法转换出来,然后就可以对各个颜色分量进行计算,计算完毕,再使用量化压缩的方法,就可以生成最终需要的颜色值。而所谓的调色板匹配的问题,当然也更加好解决了。关键是要把问题想通,把握事物的本质,才能找到简单而优美的解决问题的方法。
以前我对标准调色板的认识也存在很多错误,导致在分析和解决问题上,没有能找到最好的方法。网上也有许多人写过有关256色模式下 Alpha Blending 的文章,但是都存在许多认识上的不足,导致最后给出的算法时间和空间的复杂度都太大。我也有过一篇有关256色Alpha混合的文章,但限于当时对事物的认知能力,因此现在看来以前的许多文章是惨不忍睹。大家都在进步,以后有机会再将新的认识写成文章,同大家分享。
今天就说到这儿吧。