目前市场上的智能手机是越来越多了,而努比亚作为其中的一员,所做的可以算得上是非常成功。Z MY X 系列更是采用的安卓5.1操作系统,并配有其全新设计的nubia UI 3.5 操作界面,使用起来更加得心应手。
对于如此优秀的手机,在推荐给好友时,也应该让他们知道我们不仅对于nubia手机熟悉,也懂得很多手机上的知识;让他们知道作为每个牛仔的个人水平都是极其高的。下面为了帮助大家快速了解智能手机,会不定时地向大家简要介绍关于手机上的各个知识点,希望能帮到那些不太会用智能手机的朋友。
注:以下有些文章部分转载于其它地方,会在后方加予批注!
手机自动调节亮度原理
大家在日常使用手机的时候,由于使用的环境的光线不同,所以很多时候都需要手动调节手机屏幕的亮度。不过这样实在是很麻烦,所以相信大家一般都会设置手机屏幕自动调节屏幕亮度。那么你是否知道这个功能的实现的原理呢?
手机屏幕自动调节亮度的原理其实很简单:手机中有一个光源感应器,系统会将光源感应器接收到的光信号转换成电信号,从而改变手机屏幕的亮度。听上去似乎很简单,不过问题的关键点在于对于某个感光强度,什么屏幕亮度是合适的。
在原生系统的实现中,屏幕亮度是只变亮不变暗。系统将维持一个当开启屏幕后感光强度的最大值,屏幕亮度始终保持在这个最大值对应的屏幕亮度。只有当关闭屏幕后,才重新开始计算最大值。这就是为什么大家发觉到暗处后屏幕并不会自动变暗,而是要关闭屏幕后再开启屏幕才能自动变暗。
自动亮度的原理很简单:手机中有一个光源感应器,系统根据光源感应器的感光强度来调整屏幕亮度。问题的关键点在于对于某个感光强度,什么屏幕亮度是合适的。
首先看一下原生系统的实现,系统中有一张预设的表
感光强度 屏幕亮度
[0, 200) 25
[200, 400) 55
[400, 1000) 70
[1000, 3000) 90
[3000, 无穷大) 250
当感光强度的值位于某个区间的时候,屏幕亮度为该区间对应的值。举例来说,当感光强度为800时,查表位于[400, 1000)这个区间,相对应的屏幕亮度为70。
并且在原生系统的实现中,屏幕亮度是只变亮不变暗。系统中维护一个当开启屏幕后感光强度的最大值,屏幕亮度始终保持在这个最大值对应的屏幕亮度。只有当关闭屏幕后,才重新开始计算最大值。这就是为什么大家发觉到暗处后屏幕并不会自动变暗,而是要关闭屏幕后再开启屏幕才能自动变暗。
用一句话来总结原生系统的实现,就是很黄很暴力。
接着调查一下CM的实现,CM的中有很多和自动亮度相关的设置,但是最关键的一项设置就是允许用户去定制系统预设的表。
用户可以任意去修改感光强度的区间范围以及个数,以及某个区间对应的自动亮度。以下表为例:
感光强度 屏幕亮度[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秒作为采样时间,并且根据感光强度的变化自动调节采样间隔。经过测试,加上亮度可调节,应该能在避免复杂设置的情况下满足要求。一个看似简单问题的背后并不简单。
以上部分内容摘选于百度文库。
|