[CP] Adjust chroma/lstar filters for seed colors

There is a set of wallpapers, namely some Landscape wallpapers, that
don’t have any colors extracted from them. The wallpaper visually has
some color to it, but, the chroma of those colors is low enough that
they get filtered out by the low chroma filter.

Lower the chroma filter from 15 to 5, and eliminate the tone filter
(previously, L >= 10). Scoring compensates for this by prioritizing
chromatic colors, thus ensuring these low-chroma options are only used
if there’s no better options.

Bug: b/200675148
Test: Push landscape wallpapers #912, #914, and #924 from Monet
Studio to device. Verify color choices reflect wallpaper and aren't just
fallback colors.

Change-Id: I080e6cb51978638462a8b0ab41340aa11d495c93
This commit is contained in:
James O'Leary
2021-09-23 13:29:51 -04:00
parent 5ebb0fdc76
commit 323060e996

View File

@@ -37,8 +37,7 @@ const val NEUTRAL2_CHROMA = 8.0f
const val GOOGLE_BLUE = 0xFF1b6ef3.toInt()
const val MIN_CHROMA = 15
const val MIN_LSTAR = 10
const val MIN_CHROMA = 5
public class ColorScheme(@ColorInt seed: Int, val darkTheme: Boolean) {
@@ -75,7 +74,14 @@ public class ColorScheme(@ColorInt seed: Int, val darkTheme: Boolean) {
get() = ColorUtils.setAlphaComponent(if (darkTheme) accent1[2] else accent1[6], 0xFF)
init {
val seedArgb = if (seed == Color.TRANSPARENT) GOOGLE_BLUE else seed
val proposedSeedCam = Cam.fromInt(seed)
val seedArgb = if (seed == Color.TRANSPARENT) {
GOOGLE_BLUE
} else if (proposedSeedCam.chroma < 5) {
GOOGLE_BLUE
} else {
seed
}
val camSeed = Cam.fromInt(seedArgb)
val hue = camSeed.hue
val chroma = camSeed.chroma.coerceAtLeast(ACCENT1_CHROMA)
@@ -129,9 +135,7 @@ public class ColorScheme(@ColorInt seed: Int, val darkTheme: Boolean) {
val distinctColors = wallpaperColors.mainColors.map {
it.toArgb()
}.distinct().filter {
val cam = Cam.fromInt(it)
val lstar = lstarFromInt(it)
cam.chroma >= MIN_CHROMA && lstar >= MIN_LSTAR
Cam.fromInt(it).chroma >= MIN_CHROMA
}.toList()
if (distinctColors.isEmpty()) {
@@ -164,7 +168,7 @@ public class ColorScheme(@ColorInt seed: Int, val darkTheme: Boolean) {
val cam = it.value
val lstar = lstarFromInt(it.key)
val proportion = intToHueProportion[it.key]!!
cam.chroma >= MIN_CHROMA && lstar >= MIN_LSTAR &&
cam.chroma >= MIN_CHROMA &&
(totalPopulationMeaningless || proportion > 0.01)
}
// Sort the colors by score, from high to low.