5.0学习计划--Palette详解

原创 2016年08月30日 15:09:18

Palette是一个类似调色板的工具类,根据传入的bitmap,提取出主体颜色,使得图片和颜色更加搭配,界面更协调。

它是一个建造者模式的实例化模式,用法很简单,总的说来分三步:

1、通过builder添加参数:

Palette p = Palette.from(BitMap)//将图片传入调色板中
                                    .addFilter(Filter)//添加一个过滤器,根据HSL过滤(可以不设置,有默认值)
                                    .maximumColorCount(20)//设置一个颜色种数的临界值,有效的颜色块数量小于这个值,直接用这些颜色作为最终统计到的样本。有效的颜色块后面解释(可以不设置,有默认值)
                                    .resizeBitmapSize(480)//bitmap放入调色板时,会先压缩,提高计算速率,这里就是设置压缩后的尺寸。(可以不设置,有默认值)
                                    .clearFilters()//清除颜色过滤器(可以不调用)
                                    .generate();//第二步,创建Palette实例。
2、构建Palette实例。产生实例的方法generate有无参和有参数的两个重载方法。

无参的直接返回Palette,是同步方法。

有参的返回的是一个异步任务,通过传入的参数回调。因为统计图片颜色是比较耗时的,颜色种类越多,耗时越长。

 Palette.from(((GlideBitmapDrawable)resource).getBitmap()).generate(new Palette.PaletteAsyncListener() {
                                public void onGenerated(Palette p) {
                                    //通过异步获取调色盘,然后给需要的控件上色。
                                   List<Palette.Swatch> swatches=p.getSwatches();
                                    for(Palette.Swatch swatch:swatches){
                                        if(swatch!=null){
                                            tvTitle.setTextColor(swatch.getRgb());
                                            return;
                                        }
                                    }
                                }
                            });
3、通过Palette获取颜色。Palette取得的颜色并不是一种,有可能有多个样本。它提供了6种风格的颜色:

p.getDarkMutedColor(defaultColor);
p.getDarkVibrantColor(defaultColor);
p.getLightMutedColor(defaultColor);
p.getLightVibrantColor(defaultColor);
p.getMutedColor(defaultColor);
p.getVibrantColor(defaultColor);

柔和三种,生动三种。但并不一定每种都采集到了合适的颜色。

好了,使用方法讲完, 接下来是分析源码。首先,我们需要了解几个概念。

RGB彩色空间:把颜色抽象到空间模型中,“Color Space”,彩色空间,又称作色域。RGB彩色空间是Color Space的一种,将R、G、B三色作为xyz轴,其颜色模型如下图。在这个彩色空间里可以表示所有RGB的颜色(256*256*256种),当然,这并不代表自然界的所有颜色。

HSL:工业界的一种颜色标准,是通过对色相(H)、饱和度(S)、明度(L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,它和RGB是可以互相转换的。这里就不提供转化算法了。

VBox:java对象,代表一个RGB彩色空间,或者说是子彩色空间,下图中的每个方块都可以是一个Vbox。




Palette的取色原理:通过builder构建palette的过程就是量化统计颜色的过程,这个过程是发生在builder的generate()方法里,首先压缩图片至指定(resizeBitmapSize(int size))或者默认大小,从而减少计算量,然后构建一个ColorCutQuantizer用于颜色采集,采集满足要求颜色的逻辑就是它来实现的。接下来把采集到的样本交给Palette里的Generator,通过Generator筛选出Muted、vibrant等6种风格颜色。

在这个过程中,最重要的当属ColorCutQuantizer的采集过程。这里用到了Median-cut(中位切分法算法)。

吃完饭再讲。。。。。

相关文章推荐

ym—— Android 5.0学习之使用Palette

前言 动态色彩 根据图片来决定标题的颜色和标题栏的背景色,这样视觉上更具有冲击力和新鲜感,而不像统一色调那样呆板。 大家想知道这个效果如何实现的吗? 学习Palette轻轻松松搞定此效果哦~! P...

Android 5.0学习之使用Palette

原文地址:http://blog.csdn.net/ljx19900116/article/details/41806863 动态色彩 根据图片来决定标题的颜色和标题栏的背景色,这样视觉上...
  • luoww1
  • luoww1
  • 2015年03月06日 09:45
  • 499

Android5.0之Palette简单实用

一直想学学android5.0的新特性,但是由于模拟器的原因,一直没有了却这个心愿。 今天是个悲剧的一天,但不是有那么一句老话吗“塞翁失马,焉知非福”。先说说今天吧, 不知道咋回事,genymotio...

Android 5.0 Palette使状态栏变色

利用Palette组件来使状态变色的前提条件是:图片是本地的。

5.0+学习计划--CardView

CardView是android L的新特性。卡片式容器,其特点是圆角和阴影效果,给扁平化元素增加了立体感。其实就是一种Material Design设计理念的代码实现。...

Android 5.0 调色 Palette调色功能

Palette非常好用,也非常好玩。 Palette的作用是从图像中提取突出的颜色,这样我们可以根据提取到的色值把它赋给Toolbar,标题,状态栏等,可以使我们的整个界面色调统一,效果非常好看。 ...

android5.0L提取颜色(Palette)

简介Palette 是android5.0后提供的一个提取图片中显著颜色的工具类。Palette能提取以下色调: Vibrant(鲜明的) Vibrant dark(鲜明的暗) Vibrant lig...
  • l_lhc
  • l_lhc
  • 2016年11月08日 11:37
  • 577

Android 5.0+ 解析(三)Palette类

Android 5.0+ 解析(三)Palette类

44-android5.0 Palette和Clipping

android5.0 Palette和Clipping效果图:案例代码:xml文件

Android5.0之RecyclerView、CardView、Palette简述(后面逐步发详细的)

1. Android 5.0,Lollipop(棒棒糖)          Android5.0最明显的变化是采用了全新的设计语言,被称之为“MaterialDesign”...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:5.0学习计划--Palette详解
举报原因:
原因补充:

(最多只允许输入30个字)