努比亚UI手机自动调节亮度原理
手机自动调节亮度原理
大家在日常使用手机的时候,由于使用的环境的光线不同,所以很多时候都需要手动调节手机屏幕的亮度。不过这样实在是很麻烦,所以相信大家一般都会设置手机屏幕自动调节屏幕亮度。那么你是否知道这个功能的实现的原理呢?
手机屏幕自动调节亮度的原理其实很简单:手机中有一个光源感应器,系统会将光源感应器接收到的光信号转换成电信号,从而改变手机屏幕的亮度。听上去似乎很简单,不过问题的关键点在于对于某个感光强度,什么屏幕亮度是合适的。
[0, 200) 25
[200, 400) 55
[400, 1000) 70
[1000, 3000) 120
[3000, 无穷大) 250
用户修改[1000, 3000)这一区间对应的屏幕亮度为120.此后当感光强度位于这一区间时,屏幕亮度的值始终为120。
对于屏幕只变量不变暗的问题,CM也提供了相应的设置,使得一段时间内,屏幕可以自动变暗,这一点我会在下面UI的实现中详细展开。
用一句话来总结CM系统的实现,就是很好很强大。
最后回归到UI的实现,首先必须提到UI的一个宗旨“易用,人性化"。我们在开始设计自动亮度的时候也是围绕这个宗旨而来的。CM的确提供了最详细的设置和最完备的功能,一切交给用户。但是我们认为绝大多数小白用户不知道如何去使用这些,甚至很难理解这些功能是干嘛的,过于复杂。我们希望能够提供一个解决方案,即缺省的自动亮度能够满足绝大多数用户的需求,同时有一个简单的方式使得用户可以调节。这个简单的方式就像用户调节手动亮度一样。我们的实现大略是:
(1)在UI中,我们采用了一个理论模型,这个模型是感光强度的平方根和屏幕亮度成线性关系。
如上图所示,X轴是亮度,Y轴是感光强度的平方根,其中当感光强度值为10000(平方根值为100)对应的屏幕亮度为255,0对应了0。在这之间的满足一个线性关系,比如说如果感光强度值为6400(平方根值为80),计算出的屏幕亮度为200。在1.14的版本中我们的模型与此稍有出入,当时我们是先获取光源感应器能感应的最大感光强度,这个最大值对应了最高屏幕亮度。对于N1和G7,这个值是10240。对于MS,这个值是27000。这样对于MS来说,缺省的自动亮度会偏暗。后来查阅相关资料修正为这个模型,一般来说在白天日光照射下感光强度为10000左右,这个强度应该对应屏幕最亮,当超过这个强度后,屏幕一直保持最亮。
(2)采用了这个模型后,还提供用户在设置中调节当前感光强度对应的亮度,比如说当前感光强度为6400,亮度修改为220,我们的模型就变化成为:
原有的一条直线变成两个线段,这样当以后感光强度为6400时,亮度就自动为220。其它的感光强度也相应的加以修正。有了这个模型,我们很是兴奋,哈,这下我们可以真正的自动亮度了,感光强度一变化,我们的亮度就能跟着变化。很快,我们被光源感应器这个硬件泼了个透心凉。
光源感应器是非常敏感的,当你轻轻的晃动一下手机或者头往前凑点,感光强度马上改变,这样我们的屏幕就会忽亮忽暗。这是无法忍受的,这个时候明白了为啥原生系统只变亮不变暗了,就是为了防止这个情况的发生。
(3)这个时候,我们必须找到一个既可变亮也可变暗,同时不能让我们的屏幕亮度变来变去的办法。一开始的想法很简单,当发现感光强度变化比较大的时候,我们就开始变暗。但是这个想法也被证实太天真了,我们的光源感应器实在太脆弱了,哪怕在室内开着灯的情况下,当把手机翻转过来的时候,感光强度为10,这个强度一般是非常暗的环境下的感光强度。这样的话,手机屏幕亮度还是会变来变去,在咨询光源感应器的生产厂商得知这个在硬件中变化就是这样,无法改变。我们采取了一个折衷的方案,在一段时间内,我们开始采样,记录感光强度所有的变化值,
如果在这段时间内,所有记录的感光强度值都比较低,屏幕会开始自动变暗。对于到更亮的环境下,原理是一样的,这样我们可以防止屏幕亮度的突变。CM提供设置让用户是否采样,采样的持续时间是多长,采样的间隔是多久。我们采用了3秒作为采样时间,并且根据感光强度的变化自动调节采样间隔。经过测试,加上亮度可调节,应该能在避免复杂设置的情况下满足要求。一个看似简单问题的背后并不简单。
以上部分内容摘选于百度文库。