Подбирать цвет в зависимости от картинки

Рейтинг: 1Ответов: 1Опубликовано: 20.02.2015

Как можно подбирать цвет в зависимости от картинки, как это сделано на панели задач при наведении в windows 7?

Требуется менять фон в зависимости от картинки в android.

Ответы

▲ 3Принят

Palette

Выбранные цвета они называют вибрирующими(т.е. яркий цвет, выделенный из изображения)

Вибрирующий. Palette.getVibrantSwatch()

Вибрирующий темный. Palette.getDarkVibrantSwatch()

Вибрирующий светлый. Palette.getLightVibrantSwatch()

Заглушенный. Palette.getMutedSwatch()

Заглушенный темный. Palette.getDarkMutedSwatch()

Заглушенный светлый. Palette.getLightMutedSwatch()

Есть 2 способа получения цвета - синхронный и асинхронный.

Синхронный

// Synchronous methods.
// --------------------------------
// These should be used when you have access to the underlying image loading thread.
// Picasso allows this through a Transformation. For other libraries, YMMV.

// Uses the default palette size (16).
Palette p = Palette.generate(bitmap);

// Allows you to specify the maximum palette size, in this case 24.

Palette p = Palette.generate(bitmap, 24);

Асинхронный

// Asynchronous methods
// --------------------------------
// This is the quick and easy integration path. Internally uses an AsyncTask so 
// this may not be optimal (since you're dipping in and out of threads)

// Uses the default palette size (16).
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
    @Override
    public void onGenerated(Palette palette) {
       // Here's your generated palette
    }
});

// Allows you to specify the maximum palette size, in this case 24.
Palette.generateAsync(bitmap, 24, new Palette.PaletteAsyncListener() {
    @Override
    public void onGenerated(Palette palette) {
       // Here's your generated palette
    }
});

И еще нужно учесть, что класс не всегда может найти вибрирующий или заглушенный цвет. Все зависит от изображений и от размера палитры.

Класс доступен для Android >=21.

UPD Если использовать Support Library, то класс можно использовать для Android >=7 Support library palette

Подробнее тут.