rgb 值到 php 中的 r、g、b 值

rgb value to r,g,b values in php

我在 php 中完成了一些代码,这是一个关于实现 class 表示颜色的练习。

class 是为了让我可以接收 3 个 'red'、'green' 和 'blue' 值,这不会打扰我,但我也可以收到 'rgb' 值。

最后,这是处理 'rgb' 案例的代码:

if (array_key_exists('rgb', $kwargs))
{
$this->red = intval($kwargs['rgb']) >> 16 & 255;
$this->green = intval($kwargs['rgb']) >> 8 & 255;
$this->blue = intval($kwargs['rgb']) & 255;
}

但是,我真的不明白为什么我们需要'& 255'。

为什么我不能单独使用右移来将值转换回来?

我的意思是,如果我在 'rgb' 中收到:00000001 00000001 00000001,如果我 >> 16,我应该得到 1,如果我 >> 8,我应该得到 1 作为嗯,对吧?

我查了一下'&'运算符,它说它应该充当掩码(如果我正确理解掩码的概念),但是在掩码操作之后,我仍然得到相同的结果和以前一样 (1,1,1)。我不明白为什么这个“& 255”是必需的(我试过没有它,它不起作用)。

感谢所有花时间回答我的人。

你的假设有问题

00000001 00000001 00000001 右移 8 得到 00000001 00000001 这不是您想要的结果....用 255 (11111111) 掩盖所有设置位,但最低有效字节中的位为 0,给出 00000000 00000001,这是正确的结果

& 255 是为了确保您只收到此掩码内的值(即前 8 位设置)。这是为了确保您只获得 "R"、"B" 或 "G" 组件,而不是其他任何内容。

示例:

 RGB:       11001100 10101010 11110000

 RGB >> 16: ???????? ???????? 11001100
     & 255: 00000000 00000000 11111111
            --------------------------
                              11001100  (red)

 RGB >> 8:  ???????? 11001100 10101010
     & 255: 00000000 00000000 11111111
            --------------------------
                              10101010  (green)

 RGB      : 11001100 10101010 11110000
     & 255: 00000000 00000000 11110000
            --------------------------
                              11110000  (blue)

所以这些行本质上做的是"shifting"你想要的值到开头并通过屏蔽只获取你感兴趣的部分(前 8 位)。

感谢所有回答的人。我现在明白面具是如何工作的了。

然后回答 Rizier123,是的,代码有效,我通过了练习,我只是要求解释,我讨厌提交部分我不清楚的代码。我收到了表格中的数据:

"decimal int value" 可能后跟“<< 8”或“<< 16”

我只是用位格式来解释我的例子。