【发布时间】:2021-04-02 03:44:38
【问题描述】:
我在试图弄清楚如何获取特定像素的颜色时遇到了以下代码:
fn findRed(pointer: UInt32) (UInt8) {
return UInt8((pixelData >> 16) & 255)
}
fn findGreen(pointer: UInt32) (UInt8) {
return UInt8((pixelData >> 8) & 255)
}
fn findBlue(pointer: UInt32) (UInt8) {
return UInt8((pixelData >> 0) & 255)
}
我知道在 RGB 世界中,RGB 中的每种颜色都是在 0 到 255 的范围内测量的,但是这里的位和运算符 (& 255) 对此有何作用?
更进一步,在这种情况下移位是做什么的?为什么它会移动 8 的倍数?需要明确的是,这是处理 8 位彩色图像,但我似乎无法弄清楚它是如何完成“查找”的
【问题讨论】:
-
这是从 4 字节的 uint32 中提取单个字节,尽管代码看起来不像 C。
-
255是0xff。也就是说,它设置了所有低 8 位。当用作掩码时,它只提取低 8 位,所有高位被屏蔽为 0。这正是您提取单个 8 位 RGB 分量值所需的内容。