【问题标题】:Shifting an integer to get an ARGB gray移动整数以获得 ARGB 灰度
【发布时间】:2014-05-05 19:49:52
【问题描述】:

假设我有:

int x = 140;

我想得到以下结果:

int y = new Color(x, x, x).getRGB()

来自 Java API 文档:

getRGB()
获取表示默认 RGB ColorModel 中颜色的 RGB 值。
(位 24-31 为 0xff,16-23 为红色,8-15 为绿色,0-7 为蓝色)

但我不确定转换是如何工作的,对吗?

 int y = 0xff + x<<16 + x<<8 + x;

【问题讨论】:

    标签: java colors


    【解决方案1】:

    如果您没有忘记正确移动 alpha 值,您的方法会奏效。

    int y = (0xff<<24) + (x<<16) + (x<<8) + x;
    

    但是,一种常见的方法是直接移位位(结合左移和按位或)。我想是因为按位应用比加法更快,而且它的可读性足以为人类操作 ARGB 值。

    int y = (0xff<<24) | (x<<16) | (x<<8) | x;
    

    你可以这样看。

    (0xff << 24) =>  0xff000000
    | (x<<16)    =>  0xff8c0000
    | (x<<8)     =>  0xff8c8c00
    | x          =>  0xff8c8c8c
    

    【讨论】:

    • 谢谢!你能解释一下为什么我需要按位吗? :)
    • 添加 0xff000000 和 0x008c0000 没有按位或不给我 0xff8c0000 ?
    • @XandruDavid 我很抱歉你是对的,但你需要正确地移动 alpha 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2011-04-01
    相关资源
    最近更新 更多