Android 取主色逻辑

2023-11-07

Palette是Google官方提供的一个类,用于帮助开发者提取图片的主色。

1、生成 Palette

根据bitmap生成 Palette

//同步方法,应该在子线程中使用
Palette p = Palette.generate(bitmap);
//异步方法  
Palette.from(bitmap).generate(new PaletteAsyncListener() {
      public void onGenerated(Palette p) {
          // Use generated instance
      }
  });

2、 提取主色

Palette 主要会解析下面几种颜色:

  • Vibrant(鲜艳色)
  • Vibrant Dark(鲜艳色中的暗色)
  • Vibrant Light(鲜艳色中的亮色)
  • Muted(柔和色)
  • Muted Dark(柔和色中的暗色)
  • Muted Light(柔和色中的亮色)

举例如下:

image

Swatch表示从图像的调色板生成的颜色样本,通过Swatch提供的方法获取颜色的相关信息:

Palette.Swatch s = p.getVibrantSwatch();       //获取到充满活力的这种色调
Palette.Swatch s = p.getDarkVibrantSwatch();    //获取充满活力的黑
Palette.Swatch s = p.getLightVibrantSwatch();   //获取充满活力的亮
Palette.Swatch s = p.getMutedSwatch();           //获取柔和的色调
Palette.Swatch s = p.getDarkMutedSwatch();      //获取柔和的黑
Palette.Swatch s = p.getLightMutedSwatch();    //获取柔和的亮

Palette.Swatch s = p.getDominantSwatch();     //返回从调色板中占主导地位的样本。

可以从Swatch中获取RGB颜色值、HSL颜色向量、对应颜色在图像中所占的比例等信息

        /**
         * @return this swatch's RGB color value
         */
        @ColorInt
        public int getRgb() {
            return mRgb;
        }

        /**
         * Return this swatch's HSL values.
         *     hsv[0] is Hue [0 .. 360)
         *     hsv[1] is Saturation [0...1]
         *     hsv[2] is Lightness [0...1]
         */
        @NonNull
        public float[] getHsl() {
            if (mHsl == null) {
                mHsl = new float[3];
            }
            ColorUtils.RGBToHSL(mRed, mGreen, mBlue, mHsl);
            return mHsl;
        }

        /**
         * @return the number of pixels represented by this swatch
         */
        public int getPopulation() {
            return mPopulation;
        }

3、提取主色原理

    /**
     * Returns the dominant swatch from the palette.
     *
     * <p>The dominant swatch is defined as the swatch with the greatest population (frequency)
     * within the palette.</p>
     */
    @Nullable
    public Swatch getDominantSwatch() {
        return mDominantSwatch;
    }

    /**
     * Returns the color of the dominant swatch from the palette, as an RGB packed int.
     *
     * @param defaultColor value to return if the swatch isn't available
     * @see #getDominantSwatch()
     */
    @ColorInt
    public int getDominantColor(@ColorInt int defaultColor) {
        return mDominantSwatch != null ? mDominantSwatch.getRgb() : defaultColor;
    }
    
    @Nullable
    private Swatch findDominantSwatch() {
        int maxPop = Integer.MIN_VALUE;
        Swatch maxSwatch = null;
        for (int i = 0, count = mSwatches.size(); i < count; i++) {
            Swatch swatch = mSwatches.get(i);
            if (swatch.getPopulation() > maxPop) {
                maxSwatch = swatch;
                maxPop = swatch.getPopulation();
            }
        }
        return maxSwatch;
    }

系统默认提供获取16种颜色的Swatch,获取最大Population(颜色在图像中所占的比例)的Swatch,获取其RGB颜色值。

系统默认提供16种颜色的Swatch:

image

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 取主色逻辑 的相关文章

  • 如何在android中实现触摸平滑图像橡皮擦?

    我已经从 API 演示中看到了finturePaint java 我想实现触摸平滑橡皮擦 通过在android中触摸移动来擦除部分图像 FingerPaint 告诉我要实现这个 mPaint setXfermode new PorterDu
  • 如何自定义菜单项的背景颜色?

    我正在尝试定制Toolbar的弹出菜单 现在我无法设置菜单项的背景颜色 我的 styles xml 如下所示
  • 如何获取每个StorageVolume的可用大小和总大小?

    背景 谷歌 悲伤 计划破坏存储权限 https www xda developers com android q storage access framework scoped storage 这样应用程序将无法使用标准文件 API 和文件
  • Xamarin Android Webview Javascript

    我正在尝试通过 Xamarin for Android 创建一个移动应用程序 它有一个显示网站的 WebView 问题是正常按钮会触发 但 javascript 事件不会触发 我已经启用了 Javascript 但没有运气 如何在 Andr
  • 从响应中获取标头(Retrofit / OkHttp 客户端)

    我正在使用 Retrofit 与 OkHttp 客户端和 Jackson 进行 Json 序列化 并希望获取响应的标头 我知道我可以扩展 OkClient 并拦截它 但这发生在反序列化过程开始之前 我基本上需要的是获取标头以及反序列化的 J
  • 如何在android中显示保存在sdcard文件夹中的图像[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 当我正在显
  • Android 初学者:Android gridview 中的触摸事件

    我正在使用以下代码来使用 gridview 执行操作 稍作修改http developer android com resources tutorials views hello gridview html http developer a
  • Android WebView里面的ScrollView只滚动scrollview

    在我的应用程序中 我有一个 ScrollView 其中包含一些线性视图 一些文本视图和一个 Webview 然后是其他线性布局等 问题是 WebView 不滚动 Scroll 仅侦听 ScrollView 有什么建议么
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • 以编程方式将文本颜色设置为主要 Android 文本视图

    如何设置我的文本颜色TextView to android textColorPrimary以编程方式 我已经尝试了下面的代码 但它将 textColorPrimary 和 textColorPrimary Inverse 的文本颜色始终设
  • 在 Cordova 应用程序中获取额外功能

    我们有两个 Android 应用程序 一个使用本机 Java 实现 另一个使用 Ionic 编写 Ionic 应用程序启动我的应用程序 这是使用灯插件 https github com lampaa com lampa startapp 我
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • Android 构建发布失败,原因为:java.lang.ArrayIndexOutOfBoundsException:213(pr​​oguard 问题)

    我的项目使用调试构建变体构建得很好 但使用发布变体 Android Studio 会抛出 引起原因 java lang ArrayIndexOutOfBoundsException 213 可能是什么问题 如果我设置minifyEnable
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • 卡片视图 单击卡片移至新活动

    我是 Android 编程新手 正在研究卡片布局 我想知道如何使其可点击 android clickable true android foreground android attr selectableItemBackground 我的卡
  • 在 Android 应用程序资源中使用 JSON 文件

    假设我的应用程序的原始资源文件夹中有一个包含 JSON 内容的文件 我如何将其读入应用程序 以便我可以解析 JSON See 开放原始资源 http developer android com reference android conte
  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne

随机推荐

  • SpringBoot下如何实现Redis + Caffeine二级分布式高性能缓存

    一 设计目的 支持Spring Boot 服务下 Redis Caffeine的高性能分布式缓存的实现 减少应用服务的集成接入成本 快速实现缓存 通过AOP方式拦截处理 不侵入原业务逻辑 支持多种功能特性 如异步 超时 全局 单条控制 压缩
  • 如何查询公司有哪些股东?

    如何查询公司有哪些股东 一 问题 1 谁是公司的法人代表 2 谁是公司的股东 董事 4 公司哪年成立的 5 公司的企业实力 注册资金多少 6 公司与公司之间是什么样的关系 看看股东信息 啥都明白了 二 解决办法 现在有答案了 尤其北京市场
  • 【phpmyadmin表权限报500异常处理,亲测有效】

    phpmyadmin表权限报500异常处理 亲测有效 问题复现 如何解决 问题复现 如图点击表的权限tab后 查看日志 如何解决 最后发现是缺失PHP缺少 mysqlnd拓展包导致的 先把原来的删掉 yum remove php mysql
  • Linux Ubuntu Shell编程

    shell编程概念及作用 What shell脚本编程是一种脚本编程语言 用于编写脚本文件来执行各种系统操作和自动化任务 Why 可以消除繁琐的工作使其自动化 提高工作效率 shell脚本也是可移植的 可以在不同的linux系统上运行 学习
  • 年末阿里百度等大厂技术面试题汇总,已拿offer入职

    前言 阿里巴巴 作为国内互联网公司的Top 算是业界的标杆 有阿里背景的程序员 也更具有权威性 作为程序员 都清楚阿里对于员工要求有多高 技术人员掌握的技术水平更是望尘莫及 所以 大厂程序员的很多经验也都值得我们借鉴和学习 在一定程度上确实
  • 前端缓存方法有哪些?cookie有哪些属性?

    这里写目录标题 前端缓存方法有哪些 cookie有哪些属性 前端缓存方法有哪些 Browser Cache 浏览器缓存 当浏览器请求一个资源 例如图片 CSS JS 文件 时 它会首先检查自己的缓存中是否已经有这个资源 如果有 就直接使用缓
  • SQL中CASE WHEN ELSE END用法

    case when 用法 CASE命令有两种语句格式 语法形式1 CASE expression WHEN expression 11 THEN expression 12 WHEN expression n1 THEN expressio
  • 星星之火-42:LTE空口协议栈、数据处理流程与LTE的调制技术大全

    前言 LTE的数据处理 是数字调制 频分复用 时分复用 数模转换 模拟调制的集大成者 这里汇集了众多的复杂的调制技术 包括高阶QAM正交幅度调制 正交多载波调制OFDM CPRI传输 IQ双路正交载波调制 AD转换 射频模拟调制 LTE把调
  • 探究OLED透明屏费用:解析构成和降低策略

    随着科技的不断进步 OLED透明屏作为商业展示和创新设计的新兴技术受到越来越多的关注 然而 对于许多企业和个人来说 OLED透明屏的费用仍然是一个关键问题 为读者提供专业且实用的知识 尼伽便深入探究OLED透明屏费用的构成和降低策略 一 O
  • PHP(五十八)

    PHP XML Expat 解析器 内建的 Expat 解析器使在 PHP 中处理 XML 文档成为可能 XML 是什么 XML 用于描述数据 其焦点是数据是什么 XML 文件描述了数据的结构 在 XML 中 没有预定义的标签 您必须定义自
  • No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi

    产生背景 最近把Android Studio更新到3 0 更新之后出现了build错误 No toolchains found in the NDK toolchains folder for ABI with prefix arm lin
  • MATLAB线性规划——2019/7/4,7/5

    线性规划问题 MATLAB中规定线性规划的标准形式为 min x f T
  • 华为OD机试真题 Java 实现【找数字】【2023Q2 100分】

    目录 专栏导读 一 题目描述 输入数组nums为 输出 二 输入描述 三 输出描述 四 补充说明 五 解题思路 六 Java算法源码 七 效果展示 1 输入 2 输出 3 说明 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 专栏导读
  • PAT1033 旧键盘打字 (20 分)

    题目描述 旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及坏掉的那些键 打出的结果文字会是怎样 输入格式 输入在 2 行中分别给出坏掉的那些键 以及应该输入的文字 其中对应英文字母的坏键以大
  • chatgpt赋能python:Python学习:如何建立一个空集合?

    Python学习 如何建立一个空集合 作为一门流行的编程语言 Python在数据处理 机器学习和Web应用开发等领域广泛应用 其中 集合是Python中常用的数据类型之一 它是由不同元素组成的无序集合 其中每个元素都是唯一的 当需要处理一些
  • Git&TortoiseGit安装和配置

    前言 日常开发提交代码的过程中 Git工具是必不可少的 有些小伙伴喜欢可视化界面 TortoiseGit工具就是不二之选了 下面提供纯Git配置和Git TortoiseGit两种方式 1 纯Git安装与配置 下载 Git官网 下载安装完成
  • Python Email应用的中文乱码问题解决方法

    或者是对python的unicode理解得不透彻 时常遇到各种各样的中文乱码问题 今天 在email应用中 中文乱码又出来捣乱了 经过一段时间的误打误撞 搞出了一个解决方法 coding utf 8 Created on 2010 6 21
  • [docker]笔记-存储管理

    1 docker数据存储分为非永久性存储和永久性存储 非永久性存储 容器创建会默认创建非永久性存储 该存储从属于容器 生命周期与容器相同 会随着容器的关闭而消失 可理解为内存中数据 会随关机而消失 多用来保存不需要存储的数据 永久性存储 创
  • eclipse中注释模板的修改

    window gt preferences gt java gt code style gt code template gt comments code 手机扫一扫 关注程序员技能成长
  • Android 取主色逻辑

    Palette是Google官方提供的一个类 用于帮助开发者提取图片的主色 1 生成 Palette 根据bitmap生成 Palette 同步方法 应该在子线程中使用 Palette p Palette generate bitmap 异