Комментарии 1
Для извлечения цветов из изображения у material color utilities есть собственное api:
val bitmap = ...
val buffer = IntArray(bitmap.width * bitmap.height + 1)
bitmap.getPixels(buffer, 0, bitmap.width, 0, 0, bitmap.width - 1, bitmap.height - 1)
val colors = QuantizerCelebi.quantize(buffer, /*maxColors=*/ 1)
Оно возвращает мапу цветов, где ключ - цвет, а значение - сколько он раз встречается, maxColors
- сколько цветов будет нагенерировано, обычно нужен только 1 цвет.
Примечательно, но Palette
и Quantizer
порой извлекают не самые контрастные цвета, поэтому из нужно корректировать в системе Hct(тоже есть в библиотеке):
val chroma = 30.0
val dominant = colors.toList()[0].first.let { color ->
Hct
.fromInt(color)
.apply { setChroma(chroma) }
.toInt()
}
Сравнение цветов есть на примере ниже:
Palette - то, что сгенерировала библиотека
Palette
Chroma Light/Dark Primary - зависимость
primary
цвета от темы(светлая/темная) и от самой chroma в системе hct

Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Игра в маляра, или Content-based color scheme: как цветовая схема приложения может меняться в зависимости от контента