Для извлечения цветов из изображения у 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
Koin - сервис локатор. У меня немного другой подход, вся(или почти вся, см. зависимости, требующие activity) реализация графа определена еще на этапе компиляции, чего нет в koin.
Для извлечения цветов из изображения у material color utilities есть собственное api:
Оно возвращает мапу цветов, где ключ - цвет, а значение - сколько он раз встречается,
maxColors
- сколько цветов будет нагенерировано, обычно нужен только 1 цвет.Примечательно, но
Palette
иQuantizer
порой извлекают не самые контрастные цвета, поэтому из нужно корректировать в системе Hct(тоже есть в библиотеке):Сравнение цветов есть на примере ниже:
Palette - то, что сгенерировала библиотека
Palette
Chroma Light/Dark Primary - зависимость
primary
цвета от темы(светлая/темная) и от самой chroma в системе hctKoin - сервис локатор. У меня немного другой подход, вся(или почти вся, см. зависимости, требующие activity) реализация графа определена еще на этапе компиляции, чего нет в koin.
Не знаю, может быть я странный, но мне зашел Sparkle Ripple, он неплохо сочетается с Material 3(если, конечно, смотреть на реализацию в Keynote)
Спасибо, исправил.