如何判断当前的AMOLED屏幕模式?

How to determine current AMOLED screen mode?

许多 Android 配备 AMOLED 屏幕的设备默认显示所有颜色过饱和的图像。例如。 Samsung Galaxy 手机具有“自适应”屏幕模式,这会强制 windows 所有应用程序以原生屏幕颜色 space 呈现,比 Display-P3 更宽。

OTOH,并非所有此类设备都支持 EGL_EXT_gl_colorspace_display_p3,无论屏幕模式如何,因此我无法确定我的应用 运行 所在的设备是否具有广色域屏幕,更不用说判断这个模式是不是默认了

那么,我如何真正确定当前屏幕模式是 sRGB 还是某种广色域模式?我的目标是一种特定的设备型号,Samsung Galaxy A320F/DS(又名“A3 (2017)”),因此特定于平台的方法也可以。

有几个图层可以操作颜色。

service call SurfaceFlinger 1015 i32 1 \
f 0 f 0 f 1 f 0 \
f 0 f 1 f 0 f 0 \
f 1 f 0 f 0 f 0 \
f 0 f 0 f 0 f 1

上面的示例命令设置了一个矩阵,该矩阵作用于 RGBA 向量,交换红色和蓝色通道。要将自定义矩阵重置为默认值(身份),您只需执行

service call SurfaceFlinger 1015 i32 0

你也许可以在没有 root 权限的情况下从 Java/JNI 应用程序执行所有这些操作,只需请求一些权限,我没有研究这个。

  • mDNIe,代表移动数字自然图像引擎。这是一个三星专用系统,其运行级别低于 SurfaceFlinger。也就是说,它会影响 Always On Display,SurfaceFlinger 的自定义颜色矩阵对其没有任何影响。
    当前屏幕模式可以在 /sys/class/mdnie/mdnie/mode 文件中看到,该文件在 Galaxy A320F/DS 上似乎具有以下值映射:
    • 0 — AMOLED cinema(貌似是针对Display-P3),
    • 1 — AMOLED 照片(显然是针对 Adob​​e RGB),
    • 2 — 基本(针对 sRGB),
    • 3 —(不知道它的用途,但如果写入 mode 则该值被接受)
    • 4 — 自适应显示(最宽的,显然是原生屏幕颜色 space)。
    • 5 —(不知道它的用途,但如果写入 mode 则该值被接受)

此外,颜色还受 滑块以及高级选项 RGB 每通道调整。对前者的更改以某种方式反映在同一目录中的 mdnie_ldusensorRGB 文件中,而后者直接对应 whiteRGB 文件。

此外,蓝光滤镜功能状态反映在night_mode文件中(它也影响上述mdnie_ldusensorRGB文件).

在上述文件中,只有 mode 是非 root 用户可读的。