zoukankan      html  css  js  c++  java
  • 使用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可以设置回调类型
    
    程序猿是世界上最美的生物~
  • 相关阅读:
    vue响应式原理之Observer、Dep、Watcher
    vscode 常用插件
    脚手架搭建vue项目
    搭建框架
    select 自匹配问题
    Winform 根据Point截图并保存到指定路径
    C# Screen 类(多屏幕开发)
    C# WindowsService安装与卸载
    WebService WSDL动态访问
    C# 操作ini文件
  • 原文地址:https://www.cnblogs.com/guowenrui/p/10362483.html
Copyright © 2011-2022 走看看