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(中位切分法算法)。

吃完饭再讲。。。。。

Android 5.0+ 解析(三)Palette类

Android 5.0+ 解析(三)Palette类
  • caihongdao123
  • caihongdao123
  • 2016年05月27日 15:47
  • 7674

Android5.0之Palette简单实用

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

Android5.0的Palette(调色板)、视图阴影、着色和裁剪介绍

Android5.0的Palette(调色板)、视图阴影、着色和裁剪介绍            随着Android5.0的发布,google带来了Material Design,俗称:材料设计。并带来...
  • oQiHaoGongYuan
  • oQiHaoGongYuan
  • 2016年06月12日 22:09
  • 4015

android Palette使用详解

Palette是一个可以从图片(Bitmap)中提取颜色的帮助类,可以使UI更加美观,根据图片动态的显示相应的颜色。...
  • xiaochuanding
  • xiaochuanding
  • 2017年06月10日 13:44
  • 2548

初学者学习计划

按专题学习计划      数据结构和算法基础       理解二进制,整数、浮点数的机器表示,二进制位操作(第一周)       栈、队列、链表的概念(第一周)       树、二叉树、散列...
  • u013700340
  • u013700340
  • 2014年08月02日 11:37
  • 1351

TCP/IP 学习方法、计划

1、 TCP/IP 协议簇——计算机经典书籍元旦去好朋友那游玩,书桌恰巧摆这本书,粗粗翻了翻,感觉不错!stw对TCP/IP的掌握不是那么透彻,不客气的说就是一知半解。很有必要系统的学习一下TCP/I...
  • saintwang
  • saintwang
  • 2008年01月12日 18:58
  • 1738

.net 学习计划

近来面试处处碰壁,感觉自己技术实在是不够扎实,一年的开发在技术方面并未有太多的提高,很多知识都停留在能够基础阶段,未曾做过系统的总结技术,平时的技术积累太少,故定下学习计划,望终有一日能够成为技术大牛...
  • u012691896
  • u012691896
  • 2015年10月17日 14:11
  • 747

学习计划——2016学习计划

日子过的很快,在java开发的路上,总是希望自己能够更快的成长起来,一直在学习中,看了一些视频,看了一些书籍,但是很多时候自己的学习是不系统的,这样学习起来有一些混乱! 所以还是要计划一下: (1...
  • u010648555
  • u010648555
  • 2016年11月21日 11:51
  • 515

Linux运维入职学习计划

Linux运维入职学习计划   一、 入职学习的目的:   1.熟悉公司环境,熟悉本部门同事,了解公司IDC基本情况。对公司有一个较全面的了解,认识并认同公司的事业及企业文化,坚定自己的职业选...
  • wuxingpu5
  • wuxingpu5
  • 2015年10月26日 14:10
  • 1749

学习计划!!!!!

寒冷的2016年冬季伴随着《君の名 は》一起来临了,作为灵长类动物的一员,依然没有女朋友的各种程序猿在(一个人)哭着看完电影后,开始列起了自己长长的wish list,攒够自己的首付、去欧洲旅游一趟、...
  • hr787753
  • hr787753
  • 2016年12月20日 14:53
  • 479
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:5.0学习计划--Palette详解
举报原因:
原因补充:

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