安卓系统图片变绿直至Android 7才修复:层层剖析问题根源
图像转向绿色是Android系统的问题,直到Android 7才修复。原因是Android系统内部的核心组件的代码错误地编写了= = =。
问题在于Android提供的压缩图像接口。确切地说,这是一个名为Skia的库,在Android中。当RGB颜色空间转换为YUV时,问题就在于。但是问题不仅在于准确性下降,最大的问题是错误的四舍五入(四舍五入)。
现在让我们谈谈为什么这个问题发生在Android系统上。自诞生以来,Android系统引入了一个名为Skia(Google自己的产品)的图像库,用于处理图像,包括将图像压缩到JPEG中(通常称为JPG)。 Skia称libjpeg-turbo来实现实际压缩过程。为了获得更好的压缩效果,JPEG算法本身将通常代表屏幕上颜色的RGB(红色,绿色和蓝色)值转换为YUV值(亮度,蓝色组件,红色组件)。在正常情况下,该算法有些损失。
但是Skia没有走普通的道路。当将此转换算法的各种常数复制到其自身的代码中(当然在法律上)时,它降低了达到更高速度的准确性(专业,从16位固定点到8位固定点),这会造成更大的损坏。
最恐怖的事情是...在执行此转换操作的最后一步中,您需要除以256,在代码中,使用右移操作而不是除法来提高执行速度。
##如果我们是Skia开发人员,如何解决此问题?
将其返回到libjpeg-turbo库进行颜色空间转换本身,删除所有原始的SKIA库YUV转换代码,将此过程放在整个过程的最低级别的libjpeg-turbo库中,然后使用默认的JDCT_ISLOW方法而不是JDCT_IFAST方法。