根据色值,如何判断属于哪一类颜色

慢慢来的小邵 2021-02-19 05:09:15

主要是想通过color = Color.rgb(red, green, blue),识别出该颜色在哪一大类颜色内。但是:
通过int color = Color.rgb(red, green, blue)得到色值后,色值是一个很大的负数,是溢出吗?想转换成# 的色值,根据上面表格的阈值,来判断是红色,粉色等这样一个大类。不知道方法可行不?#开头的色值好像又不能进行比较,就有点蒙。或者将#开头的色值转换为10进制?希望各位大佬,可以给个思路呢?
...全文
579 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
慢慢来的小邵 2021-02-19
  • 打赏
  • 举报
回复
引用 3 楼 qq_1113502097 的回复:
[quote=引用 2 楼 qq_1113502097 的回复:]先看下Color.rgb的源码

 @ColorInt
    public static int rgb(
            @IntRange(from = 0, to = 255) int red,
            @IntRange(from = 0, to = 255) int green,
            @IntRange(from = 0, to = 255) int blue) {
        return 0xff000000 | (red << 16) | (green << 8) | blue;
    }
这表示你得到的int color实际上是将原来的16进制表示成了int型的,在计算机原理中,一个颜色有0-255,16进制表示的话占用两位,二进制表示占用八位。因此三种颜色占用了24位,再加上透明度,则占用了32位。刚好一个Int型的数值也是32位。因此可以把一个RBG颜色表示为int 型。但是注意,int型虽然是32位表示,但是有一位表示为正负,实际上只有32位表示数值。 因此你用Color.rgb()得到的一个Int数值,有可能为一个负数。
修改下 只有31位表示数值[/quote]感谢大佬长见识了
慢慢来的小邵 2021-02-19
  • 打赏
  • 举报
回复
引用 1 楼 不会写代码的猴子 的回复:
你可以把得到了color值转化成16进制,与表比较
好滴这就去试试
qq_1113502097 2021-02-19
  • 打赏
  • 举报
回复
引用 2 楼 qq_1113502097 的回复:
先看下Color.rgb的源码

 @ColorInt
    public static int rgb(
            @IntRange(from = 0, to = 255) int red,
            @IntRange(from = 0, to = 255) int green,
            @IntRange(from = 0, to = 255) int blue) {
        return 0xff000000 | (red << 16) | (green << 8) | blue;
    }
这表示你得到的int color实际上是将原来的16进制表示成了int型的,在计算机原理中,一个颜色有0-255,16进制表示的话占用两位,二进制表示占用八位。因此三种颜色占用了24位,再加上透明度,则占用了32位。刚好一个Int型的数值也是32位。因此可以把一个RBG颜色表示为int 型。但是注意,int型虽然是32位表示,但是有一位表示为正负,实际上只有32位表示数值。 因此你用Color.rgb()得到的一个Int数值,有可能为一个负数。
修改下 只有31位表示数值
qq_1113502097 2021-02-19
  • 打赏
  • 举报
回复
先看下Color.rgb的源码

 @ColorInt
    public static int rgb(
            @IntRange(from = 0, to = 255) int red,
            @IntRange(from = 0, to = 255) int green,
            @IntRange(from = 0, to = 255) int blue) {
        return 0xff000000 | (red << 16) | (green << 8) | blue;
    }
这表示你得到的int color实际上是将原来的16进制表示成了int型的,在计算机原理中,一个颜色有0-255,16进制表示的话占用两位,二进制表示占用八位。因此三种颜色占用了24位,再加上透明度,则占用了32位。刚好一个Int型的数值也是32位。因此可以把一个RBG颜色表示为int 型。但是注意,int型虽然是32位表示,但是有一位表示为正负,实际上只有32位表示数值。 因此你用Color.rgb()得到的一个Int数值,有可能为一个负数。
不会写代码的猴子 版主 2021-02-19
  • 打赏
  • 举报
回复
你可以把得到了color值转化成16进制,与表比较

80,354

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧