actionscript - 对 RGB 值使用逻辑位移

标签 actionscript colors bit-manipulation bit-shift

当谈到按位逻辑时,我有点天真,我有一个可能很简单的问题......基本上如果我有这个(是 ActionScript 但可以应用于多种语言):

var color:uint = myObject.color;
var red:uint = color >>> 16;
var green:uint = color >>> 8 & 0xFF;
var blue:uint = color & 0xFF;

我想知道 `& 0xFF' 到底对绿色和蓝色做了什么。我了解 AND 运算的作用,但为什么需要(或一个好主意)在这里?

此代码的来源在这里:http://alexgblog.com/?p=680

欣赏提示。
亚历克斯

最佳答案

在 RGB 中,红色有 8 位,绿色有 8 位,蓝色有 8 位。您将 3 个字节存储在一个 int 中,它以这种方式有 4 个字节:

  • 蓝色的 0-7(最不重要)位。
  • 绿色的 8-15(最不重要)位。
  • 红色的 16-23(最不重要)位。

  • 要将它们提取为单独的值,您需要右移正确的位数,以便将与您要提取的颜色对应的字节放在 int 的最低有效字节中,然后将其余的 int 放在 0 中只让那个字节值。最后一部分是通过使用带有掩码 0xFF 的 AND 运算来完成的。 AND 将 int 的唯一字节保留在其中应用相同的值,将其余字节保留在 0 中。

    这是发生的事情:
    var color:uint = myObject.color;
    

    你有这样的颜色变量:0x00RRGGBB
    var red:uint = color >>> 16;
    

    右移 16 位颜色导致:0x000000RR,导致红色值。

    但对于:
    var green:uint = color >>> 8 & 0xFF;
    

    将颜色右移 8 位后,结果为 0x0000RRGG,但这里我们只需要剩下 GG 位,因此我们使用掩码 0xFF 或更清晰的 0x000000FF 应用 AND 运算,如您所示,AND 将旧位值保留在掩码为 1,零掩码为 0,因此执行 0x0000RRGG & 0x000000FF = 0x000000GG 的结果是绿色的值。这同样适用于提取蓝色值。

    关于actionscript - 对 RGB 值使用逻辑位移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5751689/

    相关文章:

    apache-flex - Flex/actionscript - 屏幕 DPI

    flash - 如何在全屏模式下启用键盘输入?

    arrays - ActionScript 3.0 随机化数组、显示数字并拼接该数字

    html - 如何将控制台应用程序(如 MSBuild 或 PowerShell)的彩色输出转换为保留颜色的 HTML 格式?

    javascript - 如何对纯二进制数据进行纯按位运算

    有人可以向我解释一下这个按位函数中的 putchar 行吗?

    Java XOR 运算符问题

    android - Android 中的 webStageView 本地 HTML 路径

    ios - .plist,使用 HEX 而不是 RGB?

    html - chrome/firefox 中的文字颜色不同