如何确定当前的AMOLED屏幕模式?



默认情况下,许多带有AMOLED屏幕的Android设备显示所有颜色过饱和的图像。 例如,三星Galaxy手机具有"自适应"屏幕模式,该模式强制显示所有应用程序的窗口,就像它们在本机屏幕色彩空间中呈现一样,该空间比Display-P3宽。

OTOH,并非所有此类设备都支持EGL_EXT_gl_colorspace_display_p3,无论屏幕模式如何,所以我无法确定运行我的应用程序的设备是否具有宽色域屏幕,更不用说确定此模式是否是默认模式。

那么,如何实际确定当前屏幕模式是sRGB还是某些广色域模式?我的目标是一种特定的设备型号,三星Galaxy A320F/DS(又名"A3(2017("(,因此特定于平台的方式也可以。

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

  • SurfaceFlinger.此组件对于所有安卓系统都是通用的。可以通过例如作为root用户执行以下命令将自定义颜色矩阵传递给它(请参阅此请求处理程序的源代码(:
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。也就是说,它会影响始终显示,SurfaceFlinger的自定义颜色矩阵对此没有任何影响。
    当前的屏幕模式可以在/sys/class/mdnie/mdnie/mode文件中看到,该文件似乎具有Galaxy A320F/DS上的以下值映射:
    • 0- AMOLED电影院(显然针对Display-P3(,
    • 1- AMOLED照片(显然针对Adobe RGB(,
    • 2— 基本(针对sRGB(,
    • 3— (不知道它的目的,但如果写给mode,这个值是可以接受
    • 的(
    • 4— 自适应显示(最宽的、显然是本机屏幕色彩空间(。
    • 5— (不知道它的用途,但如果写给mode,这个值是可以接受的(

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

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

在上述文件中,只有mode对 SM-A320F/DS 上的非root用户可读。在SM-G950FD(又名"S8"(上,如果没有root,则无法访问任何内容。

最新更新