最近在做Android项目中有这样一个需求:在首页的每个Feed有一张图片,图片上有文字等其它属性,上面的属性随着图片颜色的不同做出相应的变化,保证属性都能够看得清。

解决方案:利用Android的Palette解析,官方文档这样介绍Palette

Palette为解析图片而来

需要知道的是上面涉及到的Vibrant、Muted、Muted Light等都有可能会提取不到,所以我们必须保证拿到一个值作为标准,这时我们很有必要知道Palette(调色板)的原理。

调色板的简单原理:

PC机上 显示的图象是由一个个像素组成的,每个像素都有自己的颜色属性。在PC的显示系统中,像素的颜色是基于RGB模型的,每一个像素的颜色由红(B)、绿 (G)、蓝(B)三原色组合而成。每种原色用8位表示,这样一个的颜色就是24位的。以此推算,PC的SVGA适配器可以同时显示224约一千六百多万种颜色。24位的颜色通常被称作真彩色,用真彩色显示的图象可达到十分逼真的效果。但是,真彩色的显示需要大量的视频内存,一幅640×480的真彩色图象需要约1MB的视频内存。由于数据量大增,显示真彩色会使系统的整体性能迅速下降。原理图:

调色板的工作原理

为了解决这个问题,计算机使用调色板来限制颜色的数目。调色板实际上是一个有256个表项的RGB颜色表,颜色表的每项是一个24位的RGB颜色值。使用调色板时,在视频内存中存储的不是的24位颜色值,而是调色板的4位或8位的索引。这样一来,显示器可同时显示的颜色被限制在256色以内,对系统资源的耗费大大降低了(不同时刻可以采用不同的调色板,因此可以扩展总共可以显示的颜色)。

显示器可以被设置成16、256、64K、真彩色等显示模式,前两种模式需要调色板。在16或256色模式下,程序必须将想要显示的颜色正确地设置到调色板中,这样才能显示出预期的颜色。图11.1显示了调色板的工作原理。使用调色板的一个好处是不必改变视频内存中的值,只需改变调色板的颜色项就可快速地改变一幅图象的颜色或灰度。

除此之外还要知道的一个知识点是

第一步:得到所要解析图片的BItmap

第二步:缩小Bitmap(提升性能)

第三步:异步方式提取Bitmap样本(Swatch)让样本的Color值尽量少,原因是我们主要想拿到HSL值中的Lightness明度值。

第四步:获取明度值Lightness,一般大于75%文字偏向与黑色,否则白色。

最后配上代码

各位还请切磋赐教

2015/ 7/10 于北京   白袍君

android 调色板,所不了解的Android调色板相关推荐

  1. Android运行时候报错:android.view.InflateException: Binary XML file line #19: Binary XML file lin

    Android运行时候报错:android.view.InflateException: Binary XML file line #19: Binary XML file lin 这个问题自己大致在 ...

  2. android调用相册和摄像头,调用Android摄像头与打开相册

    以下为代码块: package com.example.demo; import java.io.File; import android.annotation.TargetApi; import a ...

  3. [React Native Android安利系列]搭建React Native Android环境

    欢迎大家收看react-native-android系列教程,跟着本系列教程学习,可以熟练掌握react-native-android的开发,你值得拥有 https://segmentfault.co ...

  4. android写代码截屏微信,android 模仿微信头像裁剪

    android 在android开发中经常会碰到修改头像的功能需求, 而在修改头像>中最难的部分就是在头像的裁剪功能.虽说网上一大堆裁剪的例子,但最重要的是要理解里面的实现原理,这样以后自己改起 ...

  5. android听书功能实现,基于Android的喜马拉雅听书的实现.docx

    摘要:当今时代,智能手机已经成为了人们生活中必不可少的一种工具,它的便携和功能的强大无时无刻不方便着我们的生活.而且智能手机有着庞大的市场,上到老人下到小孩,无一不对智能手机的功能有所耳闻,其中绝大部 ...

  6. android 动态获取权限有哪些,Android 6.0+ 动态获取权限

    Android 6.0+ 动态获取权限 这里有一个现成的库,可以直接拿来用.方便简单 1.向app下的gradle添加依赖: dependencies{ // android 6.0+ 动态获取权限 ...

  7. 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/337.html   ...

  8. android百度地图更换定位图标,android百度地图定位,改变MyLocationOverlay默认图标(原始为蓝色点)(两种方法)...

    开放地图API无外乎google ,百度,高德等.其它的还有很多,不过比较好用的就这三种了,如果不需要出国(台湾例外),则最好使用百度地图,性能比高德好的多,无聊的时候自己可以测试测试.. 下面我简单 ...

  9. android程序设计期末试题b,《Android程序设计》期末试题B.doc

    <Android程序设计>期末试题B.doc 一.判断题(每小题2分,共10分) 1.Android是J2ME的一个实现.( ) 2.View是ViewGroup的子类.( ) 3.一个I ...

  10. android跳转应用市场搜索,Android 应用中跳转到应用市场评分

    在开发Android App过程中,经常会遇见这样的功能.从当前的app跳转到一个应用商店并且跳转到自己app的详情页面,让用户给自己的App进行评分.评价,从而提高自己App的排名.下面介绍三种方法 ...

最新文章

  1. 《自己动手写Docker》书摘之三: Linux UnionFS
  2. react里面的this_React 中 this指向问题
  3. 《四世同堂》金句摘抄(九)
  4. hive表ddl导出_Flink 1.11 与 Hive 批流一体数仓实践
  5. Android 系统(259)---获取本机号码及sim卡信息
  6. PC自增与转移地址计算问题总结
  7. 利用python和cloudvolume包从谷歌云盘中多线程下载数据
  8. 八大排序算法原理及实现
  9. esp_wifi_repeater, 全功能WiFi中继器
  10. This scheduler instance (...) is still active but was recovered by another instance in the cluste
  11. matlab画回归曲线方程,MATLAB线性回归方程与非线性回归方程的相关计算
  12. spring data JPA的使用
  13. 怎么录屏幕视频?教你学会录制屏幕
  14. 阿里巴巴食堂:看菜名我跪了~程序员:给我来个“油炸产品经理”
  15. 电容倍增器作为电源滤波器
  16. 东方通TongWeb部署
  17. mysql返回empty_mysql在文件刪除時返回空集
  18. Apk 拆包替换文件
  19. 多线程同步与并发访问共享资源工具—Lock、Monitor、Mutex、Semaphore
  20. 机器学习-泛化能力笔记

热门文章

  1. 保险合同中的“不可抗辩条款”
  2. 新浪导航栏下拉菜单案例展示
  3. 给推荐系统加入先验知识的方法总结
  4. SpringCloud微服务快速入坑
  5. Ubuntu 20.04 美化教程
  6. Android播放音频到耳机,Android应用开发之android插入耳机状态使用扬声器外放音乐...
  7. matlab u 上波浪线,波浪线如何居中,在excel中怎样输入在文字中部加波浪线
  8. kasp技术原理_KASP 2x PCR Mix 说明书
  9. 开源工具TestDisk数据恢复方法
  10. ActiveMQ笔记(一)