使用Palette抽取图片颜色

最近想实现从一张图片中,获取它的颜色,设置给其余控件,以使得 UI 页面的整体风格更加的美观和融洽。网上查询了一些资料,发现了一个Android 下比较有意思的 Support v7 库~~~

Palette库可以从一张图片(Bitmap)中提取出它突出的颜色,恰巧可以达到我的需求。

步骤

1、传递一个 Bitmap,得到一个 Palette。
2、获取Palette中指定的色样
3、从色样中提取相应的颜色。

开始使用

导包

在工程下的 build.gradle 里添加依赖才可以使用Palette,因为传递一个 Bitmap,得到一个Palette,我平常用的glide库加载图片,所以后面我就用glide来获取Bitmap。

implementation 'com.android.support:palette-v7:27.1.1'
implementation 'com.github.bumptech.glide:glide:3.6.1'

1、获取Palette对象

获取Palette对象有同步异步两种方式,建议使用异步获取Palette对象。

同步获取

Palette palette = Palette.from(bitmap).generate();

异步获取

Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
    @Override
    public void onGenerated(Palette palette) {

    }   
});

2、获取Palette生成的色样

可以获取到以下几种色样,但是有的时候获取不到对应的色样对象,必须注意非空判断。
| 色样| 颜色|
| ---------- |:-----------:|
|DominantSwatch|最突出的颜色|
|VibrantSwatch|有活力的颜色|
|DarkVibrantSwatch|有活力的暗色|
|LightVibrantSwatch|有活力的亮色|
|MutedSwatch|柔和的颜色|
|DarkMutedSwatch|柔和的暗色|
|LightMutedSwatch|柔和的亮色|

////获取有活力的颜色
final Palette.Swatch swatch1 = palette.getDarkVibrantSwatch();
//非空判断
if (swatch1 != null) {
}

3、从色样中提取相应的颜色。

得到Swatch对象之后,就可以调用Swatch中的获取我们需要的颜色值。

//图片中的像素数量
swatch.getPopulation()
//颜色的RBG值
swatch.getRgb()
//颜色的HSL值
swatch.getHsl()
//主体文字的颜色值
swatch.getBodyTextColor()
//标题文字的颜色值
swatch.getTitleTextColor()

这是从我的项目中抽出来的代码,大家可以看看

Glide.with(MainActivity.this).load(music_pic).asBitmap().into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                        music_message_music_iv.setImageBitmap(resource);
                        Palette.generateAsync(resource, new Palette.PaletteAsyncListener() {
                            @Override
                            public void onGenerated(Palette palette) {
                                // palette为生成的调色板
                                final Palette.Swatch s1 = palette.getDarkVibrantSwatch();
                                if (swatch1 != null) {
                                    linearLayout.setBackgroundColor(swatch1.getRgb());
                                }
                            }
                        });
                    }
                }); //方法中设置asBitmap可以设置回调类型

猜你喜欢

转载自www.cnblogs.com/guowenrui/p/10362483.html