You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Palette.getDominantColor()返回负数RGB包整数 如何获取真实颜色信息

原理说明

Android 中 getDominantColor() 返回的是32位有符号ARGB整型(ColorInt),出现负数是正常现象:32位的最高位存储Alpha透明度值,当Alpha值大于127时,最高位为1,作为有符号整数解析时就会呈现为负数,不存在数据错误。

实现方案

方案1:使用系统SDK提供的Color工具类(推荐)

直接调用Android SDK自带的android.graphics.Color类的对应方法即可直接提取各通道值,无需手动做位运算:

val dominantColor = p.getDominantColor(0)
// 提取各通道值,范围均为0-255
val alpha = Color.alpha(dominantColor)
val red = Color.red(dominantColor)
val green = Color.green(dominantColor)
val blue = Color.blue(dominantColor)
// 也可以直接转成十六进制颜色字符串格式
val hexColor = String.format("#%08X", dominantColor)

以你拿到的-8341352为例,提取结果为:Alpha=255,Red=128,Green=160,Blue=88,对应十六进制颜色值为#FF80A058。

方案2:手动位运算转换

如果需要手动实现转换逻辑,可以通过位与和移位操作拆分各通道:

val color = -8341352
val alpha = (color shr 24) and 0xFF
val red = (color shr 16) and 0xFF
val green = (color shr 8) and 0xFF
val blue = color and 0xFF

内容的提问来源于stack exchange,提问作者Simone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:48:04