【问题标题】:Palette.getDominantColor() return a negative number. RGB packet intPalette.getDominantColor() 返回一个负数。 RGB 数据包整数
【发布时间】:2021-08-31 16:43:45
【问题描述】:
我正在尝试使用 Palette 从位图中选择主要颜色:
val p: Palette = Palette.from(bitmap!!).generate()
Log.d(TAG, "${p.getDominantColor(0)}")
输出是-8341352
从reference 返回的值是一个 RGB 数据包 int。那么如何才能得到颜色的真实信息呢?我找不到与七位负整数的 RGB 值的比较
【问题讨论】:
标签:
kotlin
graphics
bitmap
rgb
androidx
【解决方案1】:
使用颜色实用程序函数将颜色的 RGBA 分量提取为 0-255 范围内的整数。
val argb = p.getDominantColor(0)
val a = Color.alpha(argb)
val r = Color.red(argb)
val g = Color.green(argb)
val b = Color.blue(argb)
如果您使用的是 androidx core-ktx 库(默认项目可能已经存在),您可以通过解构来获取它们:
val (a, r, g, b) = p.getDominantColor(0)
如果您希望将值作为 0..1 范围内的浮点数,您可以将上述值除以 255f,或者如果您的最低 SDK 版本至少为 26,您可以像这样使用解构(注意 A 是最后一个而不是首先在使用 Color 类而不是表示颜色的 Int 时):
val argb = p.getDominantColor(0)
val (r, g, b, a) = Color.valueOf(argb)