android颜色管理WCG,AndroidQ色彩(颜色)模式解析(一)

更新时间:2023-06-24 11:59:04 阅读: 评论:0

smalltitsandroid颜⾊管理WCG,AndroidQ⾊彩(颜⾊)模式解析
(⼀)
[TOC]
Android ⾊彩(颜⾊)模式解析(⼀)tasha
Android Q 在系统设置中提供了可设置的⾊彩模式,当然这功能很多⼚商早就有了~,落后归落后,我们还是看看Android是怎么实现的!
Android Q提供了4种⾊彩模式:
Natural ⾃然⾊
Boosted 效果增强
Saturated 饱和⾊
Adaptive ⾃动调节
下⾯我们就结合实际代码,看看具体的实现和流程!
FrameWork⾊彩模式的定义及实现
为了实现⾊彩模式的切换,Android Framework设计了ColorDisplayManager及对应的服务,提供可切换的⾊彩模式和对应的设置接⼝。四种⾊彩模式对应的值如下:
public static final int COLOR_MODE_NATURAL = 0;
布什女儿public static final int COLOR_MODE_BOOSTED = 1;
public static final int COLOR_MODE_SATURATED = 2;
public static final int COLOR_MODE_AUTOMATIC = 3;
Settings中通过ColorDisplayManager的tColorMode接⼝进⾏⾊彩模式的切换,对应的代码如下:
* packages/apps/Settings/src/com/android/ttings/display/ColorModePreferenceFragment.java
@Override
protected boolean tDefaultKey(String key) {
switch (key) {
ca KEY_COLOR_MODE_NATURAL:
beltwaymColorDisplayManager.tColorMode(ColorDisplayManager.COLOR_MODE_NATURAL);
break;
ca KEY_COLOR_MODE_BOOSTED:
mColorDisplayManager.tColorMode(ColorDisplayManager.COLOR_MODE_BOOSTED);
break;
ca KEY_COLOR_MODE_SATURATED:
mColorDisplayManager.tColorMode(ColorDisplayManager.COLOR_MODE_SATURATED);
break;
ca KEY_COLOR_MODE_AUTOMATIC:
mColorDisplayManager.tColorMode(ColorDisplayManager.COLOR_MODE_AUTOMATIC);
break;
new divide歌词
}
return true;
}
在ColorDisplayManager中,设计了⼀个内部类ColorDisplayManagerInternal,通过内部类和对应的系统服务
COLOR_DISPLAY_SERVICE进⾏交互。
* frameworks/ba/core/java/android/hardware/display/ColorDisplayManager.java
public void tColorMode(int colorMode) {
mManager.tColorMode(colorMode);
}
对应的服务实现如下:
* frameworks/ba/rvices/core/java/com/android/rver/display/color/ColorDisplayService.java
private void tColorModeInternal(@ColorMode int colorMode) {
if (!isColorModeAvailable(colorMode)) {
throw new IllegalArgumentException("Invalid colorMode: " + colorMode);
}
System.putIntForUr(getContext().getContentResolver(), System.DISPLAY_COLOR_MODE,
colorMode,
mCurrentUr);
}
在⾊彩显⽰服务中,只是将需要的⾊彩模式对应的值写到了,系统设置的数据库中,键值DISPLAY_COLOR_MODE。
其实,看多了Framework的代码,我们就会知道,肯定会有⼀个ContentObrver来监听这个数据的变化的,在ColorDisplayService的tUp函数中:
private void tUp() {
Slog.d(TAG, "tUp: currentUr=" + mCurrentUr);
// Listen for external changes to any of the ttings.
if (mContentObrver == null) {
mContentObrver = new ContentObrver(new ().getLooper())) {
@Override
public void onChange(boolean lfChange, Uri uri) {
final String tting = uri == null ? null : LastPathSegment();
if (tting != null) {
switch (tting) {
... ...
ca System.DISPLAY_COLOR_MODE:
onDisplayColorModeChanged(getColorModeInternal());
当设置中,切换⾊彩模式,修改了系统设置中的DISPLAY_COLOR_MODE值后,这个obrver就会触发DISPLAY_COLOR_MODE的onChange,最后通过onDisplayColorModeChanged函数来处理。
* frameworks/ba/rvices/core/java/com/android/rver/display/color/ColorDisplayService.java机器人外文翻译
private void onDisplayColorModeChanged(int mode) {
if (mode == NOT_SET) {
return;
}
mNightDisplayTintController.cancelAnimator();
mDisplayWhiteBalanceTintController.cancelAnimator();
if (mNightDisplayTintController.isAvailable(getContext())) {
mNightDisplayTintController
denmark什么意思.tUp(getContext(), dsLinearColorMatrix(mode));
mNightDisplayTintController
.ColorTemperatureSetting());
}
updateDisplayWhiteBalanceStatus();
final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class);
dtm.tColorMode(mode, Matrix());
}asco
这⾥涉及到夜光屏和⽩平衡,说⽩了,这些的实现都是跟⾊彩和亮度有关。我们先留下夜光屏幕和⽩平衡,单看⾊彩模式的流程。⾊彩模式,通过 DisplayTransformManager 的tColorMode接⼝继续往下传:
* frameworks/ba/rvices/core/java/com/android/rver/display/color/DisplayTransformManager.java
public boolean tColorMode(int colorMode, float[] nightDisplayMatrix) {
if (colorMode == ColorDisplayManager.COLOR_MODE_NATURAL) {
applySaturation(COLOR_SATURATION_NATURAL);
tDisplayColor(DISPLAY_COLOR_MANAGED);
} el if (colorMode == ColorDisplayManager.COLOR_MODE_BOOSTED) {
applySaturation(COLOR_SATURATION_BOOSTED);
tDisplayColor(DISPLAY_COLOR_MANAGED);
} el if (colorMode == ColorDisplayManager.COLOR_MODE_SATURATED) {
applySaturation(COLOR_SATURATION_NATURAL);
tDisplayColor(DISPLAY_COLOR_UNMANAGED);
} el if (colorMode == ColorDisplayManager.COLOR_MODE_AUTOMATIC) {
applySaturation(COLOR_SATURATION_NATURAL);
tDisplayColor(DISPLAY_COLOR_ENHANCED);
}
tColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, nightDisplayMatrix);
updateConfiguration();
return true;
}
重点来了,前⾯我们说到的4种⾊彩模式,主要通过两个参数的调节来实现的
Saturation饱和度
饱和度两种可选模式:⾃然模式和增强模式
private static final float COLOR_SATURATION_NATURAL = 1.0f;
private static final float COLOR_SATURATION_BOOSTED = 1.1f;
DisplayColor显⽰颜⾊
显⽰颜⾊有3种模式:Managed,UnManaged以及增强模式
private static final int DISPLAY_COLOR_MANAGED = 0;
private static final int DISPLAY_COLOR_UNMANAGED = 1;
private static final int DISPLAY_COLOR_ENHANCED = 2;
我们的4中⾊彩模式:
**
COLOR_SATURATION_NATURAL
COLOR_SATURATION_BOOSTED
holybibleDISPLAY_COLOR_MANAGED
⾃然⾊ COLOR_MODE_NATURAL
效果增强 COLOR_MODE_BOOSTED
DISPLAY_COLOR_UNMANAGED
饱和⾊ COLOR_MODE_SATURATED
DISPLAY_COLOR_ENHANCED
⾃动调节 COLOR_MODE_AUTOMATIC
这两个参数的设置是通过binder直接设置到SurfaceFlinger的,对应的Binder 命令分别为
SURFACE_FLINGER_TRANSACTION_SATURATION和 SURFACE_FLINGER_TRANSACTION_DISPLAY_COLOR。相应的代码如下:
饱和度的设置通过applySaturation函数
* frameworks/ba/rvices/core/java/com/android/rver/display/color/DisplayTransformManager.java
private void applySaturation(float saturation) {
SystemProperties.t(PERSISTENT_PROPERTY_SATURATION, String(saturation));
final IBinder flinger = Service(SURFACE_FLINGER);
if (flinger != null) {
final Parcel data = Parcel.obtain();
公共交通工具
data.writeInterfaceToken("android.ui.ISurfaceCompor");
data.writeFloat(saturation);
try {
} catch (RemoteException ex) {
Slog.e(TAG, "Failed to t saturation", ex);
} finally {
}
}
}
显⽰颜⾊的设置通过tDisplayColor函数
private void tDisplayColor(int color) {
SystemProperties.t(PERSISTENT_PROPERTY_DISPLAY_COLOR, String(color));
final IBinder flinger = Service(SURFACE_FLINGER);
if (flinger != null) {
final Parcel data = Parcel.obtain();
data.writeInterfaceToken("android.ui.ISurfaceCompor");
data.writeInt(color);
try {
} catch (RemoteException ex) {
Slog.e(TAG, "Failed to t display color", ex);
} finally {
}
}
}
⼩结⼀下,Android提供了4种⾊彩模式:⾃然⾊,效果增强,饱和⾊和⾃动调节。⽽Framework中,是通过两个参数来实现的:饱和度和显⽰颜⾊,具体实现,,,往下看!

本文发布于:2023-06-24 11:59:04,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/155955.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模式   设置   对应   实现   系统   切换   夜光   留下
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图