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
相关产品推荐
相关产品推荐

