<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      手機護眼概論及OLED屏幕降低頻閃原理介紹

      影響護眼的因素

      藍光

      目前手機大多已經實現硬件低藍光,而且藍光也可以通過護眼模式輕易克服。

      偏振光

      偏振光指振動方向與傳播方向不對稱的光,主要分為圓偏振光與線偏振光兩種。

      線偏振光測試方法為:透過偏振片看屏幕,旋轉偏振片,若存在某個角度屏幕發出的光線無法透過偏振片,則是線偏振光。一些墨鏡鏡片、相機的cpl鏡都可以作為偏振片使用。

      大部分LCD屏幕是線偏振光[1],少部分OLED屏幕(如紅米note12turbo)也是線偏振光。

      2009年閆曉林等人讓隨機分組的測試者觀看圓偏振光電視和普通液晶電視,進行分級視力和眨眼頻率測試。通過分級視力變化和眨眼頻率反映視疲勞程度。分析得出,當觀看兩種偏振光電視一段時間后,不論是兒童還是成人都會產生暫時視力下降。圓偏振光與線偏振光相比,引起的視覺疲勞程度會小一些。研究者推測是由于圓偏振光本身與線偏振光相比,其振動面不只限于某一固定方向,而是圍繞光的前進方向轉動,旋轉電矢量端點描出均勻圓軌跡,這與自然光的振動面在各個方向上均勻分布是比較接近的,因而可能產生的視疲勞較輕。[2]

      在屏幕貼膜之后,線偏振光的成分會減少,因此可以作為護眼的手段。

      眩光

      眩光是一種影響視覺的機制。它是指視野中亮度分布不均勻、亮度范圍變化不適宜、或者時間和空間上存在極端對比,造成人眼在觀看時的不舒適之感或觀察細部物體能力降低的現象。按照眩光產生的標準,可以分為直接眩光和反射眩光。

      貼AR抗反射膜,可以減少反射眩光。

      屏幕的頻閃

      頻閃的度量

      目前手機屏幕頻閃的度量主要有兩種方式,一種是用低快門時間的相機拍攝手機屏幕,觀察黑色條紋;另一種是高時間分辨率的照度探頭,測出屏幕上指定區域的亮度隨時間變化曲線,再通過一定的公式計算出頻閃效應可見性度量值(SVM, Stroboscopic effect visibility measure)。

      相機拍攝

      相機拍攝的方式相當簡單,只要有一部手機,就可以觀察頻閃程度。具體方法為,將手機相機調到專業模式,將快門時間調到 1/4000 秒以下,對準被測手機屏幕,然后可以看到黑色條紋,如圖所示。

      一般來說,黑色條紋越寬、顏色越深、越稀疏,頻閃程度越強。

      SVM 計算方法[3]

      傳感器測得的照度隨時間變化產生波形。將波形歸一化,使時間平均值等于 1 ,得到相對照度波形,記為 \(y(t)\),并進行三角傅里葉級數展開

      \[y(t) = \dfrac{a_0}{2} + \sum\limits_{m=1}^{\infty} \left[ a_m\cos\left(\dfrac{2\pi m t}{T}\right) + b_m\sin\left(\dfrac{2\pi m t}{T}\right) \right] \]

      相對照度波形的第 \(m\) 個傅里葉分量的相對幅度記為 \(C_{m} = \sqrt{a_m^2 + b_m^2}\),頻率記為 \(f_{m} = \dfrac{m}{T}\)

      考慮頻閃效應對比度閾值函數(stroboscopic effect contrast threshold function)

      \(T_{m}\) 為頻率 \(f_{m}\) 對應的頻閃效應對比度閾值函數值。

      則 SVM 計算公式如下

      \[\mathrm{SVM}=\left[~\sum\limits_{m=1}^{\infty}\left(\dfrac{C_{m}}{T_{m}}\right)^{3.7}~\right]^{1/3.7} \]

      SVM 值越高,頻閃程度越高。而且 SVM 值是可以進行精確計算的,因此可以把 SVM 作為頻閃分析的理論依據。

      觀察 SVM 的計算過程,可以發現其取值與屏幕亮度絕對值無關,只與亮度隨時間變化曲線的形狀有關

      亮度越高,頻閃越低

      這個結論非常容易驗證。最直接的,B站up主低調的山用相機拍攝過大量OLED屏幕,都有在高亮度下低頻閃,在低亮度下高頻閃的現象[4]

      更進一步的,up主Navis-慢點評測展示了OLED手機屏幕 SVM 隨屏幕亮度變化曲線[5]

      up主先看評測制作APP先看頻閃,同樣展示了OLED手機屏幕 SVM 隨屏幕亮度變化曲線[6]

      因此可以得出結論,一般情況下,OLED 屏幕亮度越高,頻閃越低。結合分析 SVM 計算過程得到的結論,有降低屏幕頻閃的方法:維持屏幕在高亮度,通過增加一個不透明度可調節的黑色濾鏡來控制屏幕實際亮度,從而實現在低亮度下也有低頻閃,這就是通過屏幕濾鏡降低手機頻閃的原理。

      屏幕濾鏡的局限

      之前提到,屏幕濾鏡可以降低屏幕亮度,同時維持亮度隨時間變化曲線的形狀不變。而 SVM 只取決于亮度隨時間變化曲線的形狀。因此,屏幕濾鏡可以讓 SVM 一直處于最小值即頻閃最低的同時降低屏幕亮度。

      但是,真實情況并非如此。屏幕頻閃由pwm調光和像素刷新共同決定。高亮度下pwm調光占主導,超低亮度下像素刷新占主導地位。這是因為超低亮度的時候pwm調光的波動不如像素刷新的波動大,120Hz 刷新率,每一次刷新就需要關閉再點亮一次像素,這個重新點亮就意味著頻閃[7]

      所以,即使使用了屏幕濾鏡,在超低亮度下也會存在 120Hz 的頻閃!

      屏幕濾鏡在安卓系統的實現

      幸運的是,安卓系統給出了足夠的 api,使我們能夠實現屏幕濾鏡。

      首先,app 需要打開無障礙服務,獲取顯示在整個屏幕上的權限。

      參考:https://developer.android.com/guide/topics/ui/accessibility/service

      開啟無障礙服務后,利用無障礙服務的上下文獲取整個屏幕的窗口管理器,往窗口管理器添加純黑色、透明度可調的視圖對象,和相應的參數對象,就實現了屏幕濾鏡。

      將無障礙服務上下文傳入下面代碼的 FilterViewManager 對象,即可在屏幕上顯示一個透明度可調的黑色濾鏡。

      import android.content.Context;
      import android.graphics.Color;
      import android.graphics.PixelFormat;
      import android.os.Handler;
      import android.os.Looper;
      import android.view.View;
      import android.view.WindowManager;
      
      public class FilterViewManager {
      
          private final Context context;
          private final WindowManager windowManager;
          private final WindowManager.LayoutParams layoutParams;
          private final FilterView filterView;
          /**
           * 濾鏡處于開啟狀態,為 true
           */
          public boolean isOpen;
          private float alpha = 0f;
          private float hardwareBrightness = 0f;
      
          public FilterViewManager(Context c) {
              // 這里假設傳入的 Context 有無障礙權限,后面的代碼不對無障礙權限進行檢驗
      
              isOpen = false;
              context = c;
              windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
              layoutParams = new WindowManager.LayoutParams();
              filterView = new FilterView(context);
      
              layoutParams.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
              // width 和 height 盡可能大,從而覆蓋屏幕
              layoutParams.width = 4000;
              layoutParams.height = 4000;
              layoutParams.format = PixelFormat.TRANSLUCENT;
              layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                      WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                      WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
                      WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
                      WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS |
                      WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
          }
      
          public void open() {
              new Handler(Looper.getMainLooper()).post(() -> {
                  // 在UI線程中更新UI組件
                  if (!isOpen) {
                      windowManager.addView(filterView, layoutParams);
                      isOpen = true;
                  }
              });
          }
      
          public void close() {
              new Handler(Looper.getMainLooper()).post(() -> {
                  // 在UI線程中更新UI組件
                  if (isOpen) {
                      windowManager.removeView(filterView);
                      isOpen = false;
                  }
              });
          }
      
          public float getAlpha() {
              if (isOpen) {
                  return alpha;
              } else {
                  return -1f;
              }
          }
      
          public void setAlpha(float alpha) {
              new Handler(Looper.getMainLooper()).post(() -> {
                  if (isOpen) {
                      float a = Math.min(1f, Math.max(0f, alpha));
                      // 在UI線程中更新UI組件
                      filterView.setAlpha(a);
                      this.alpha = a;
                  }
              });
          }
      
          public float getHardwareBrightness() {
              if (isOpen) {
                  return hardwareBrightness;
              } else {
                  return -1f;
              }
          }
      
          public void setHardwareBrightness(float brightness) {
              new Handler(Looper.getMainLooper()).post(() -> {
                  if (isOpen) {
                      float b = Math.min(1f, Math.max(0f, brightness));
                      // 在UI線程中更新UI組件
                      // layoutParams.screenBrightness 會覆蓋系統亮度設置
                      layoutParams.screenBrightness = b;
                      windowManager.updateViewLayout(filterView, layoutParams);
                      hardwareBrightness = b;
                  }
              });
          }
      
          private static class FilterView extends View {
      
              public FilterView(Context context) {
                  super(context);
                  setBackgroundColor(Color.BLACK);
                  setAlpha(0f);
              }
      
              @Override
              public void setAlpha(float alpha) {
                  super.setAlpha(alpha);
                  invalidate();
              }
          }
      }
      

      開源 APP:濾鏡護眼防頻閃

      github 項目:https://github.com/cjyyx/ScreenFilter

      對于 OLED 屏幕的手機,一般情況下,屏幕亮度越低,頻閃越強。本應用控制屏幕具有較高的亮度,并通過給屏幕添加一層不透明度可調的黑色濾鏡來調節實際亮度,從而實現低亮度下也有低頻閃的效果。

      注意:

      1. 支持直接拖動系統狀態欄亮度條來控制亮度
      2. 當環境光照較高時,應用會自動關閉屏幕濾鏡并打開系統自動亮度,從而使屏幕能夠達到最大激發亮度
      3. 最低支持版本安卓10
      4. 本應用在開發時沒有考慮兼容性,目前只能保證在我的手機上正常運行。我的手機系統是 MIUI14
      5. 開啟濾鏡時不要開啟系統紙質護眼,否則會造成花屏

      下載鏈接 1:github release
      https://github.com/cjyyx/ScreenFilter/releases

      下載鏈接 2:123云盤
      https://www.123pan.com/s/Be4Hjv-fUUtv.html


      1. 圓偏振光和線偏振光測試, https://www.bilibili.com/video/BV15n4y1R7pp ??

      2. 張平奇,王丹,呂振華,等.健康顯示的影響因素綜述[J].液晶與顯示,2020,35(09):981-990. ??

      3. 維基百科, https://en.wikipedia.org/wiki/Stroboscopic_effect ??

      4. 低調的山, https://space.bilibili.com/394790691 ??

      5. Navis-慢點評測, https://space.bilibili.com/8986182 ??

      6. 先看頻閃, https://www.bilibili.com/video/BV1K14y1D7mg ??

      7. 像素刷新稀釋, https://www.bilibili.com/opus/781396590214512640 ??

      posted @ 2024-06-26 12:45  cjyyxn  閱讀(3872)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 少妇人妻偷人免费观看| 中文字幕人妻精品在线| 人妻中文字幕不卡精品| 国产对白叫床清晰在线播放| 中文字幕日韩有码一区| 99久久免费精品色老| 午夜精品一区二区三区在线观看 | 少妇人妻偷人免费观看| 日韩精品一区二区av在线| 国产精品人成视频免费国产| 乱中年女人伦av三区| 成人亚洲一级午夜激情网| 欧美人人妻人人澡人人尤物| 亚洲午夜亚洲精品国产成人| 视频一区二区三区四区五区| 亚洲人成网站色www| 亚洲爽爆av一区二区| 无码AV无码免费一区二区| 久久精品国产中文字幕| 天堂av资源在线免费| 亚洲国产成人一区二区在线| 不卡在线一区二区三区视频| 国产中文字幕在线一区| 四虎在线成人免费观看| 国产精品无码一区二区在线| 久久国内精品自在自线观看| 久久综合久中文字幕青草| 欧美人妻在线一区二区| 日本狂喷奶水在线播放212| 国产91精选在线观看| 亚洲最大福利视频网| 精品乱码一区内射人妻无码| 国产一区二区三区九九视频| 强奷漂亮人妻系列老师| 高清无码爆乳潮喷在线观看| 免费无码影视在线观看mov| 丁香花成人电影| 国产成人久久综合第一区| 湖口县| 亚洲精品一区二区动漫| 亚欧美闷骚院|