要插入值,首先使用掩码清除与给定颜色 channel 对应的像素的 8 位。例如,对于红色,将 8 位掩码左移 16 位,将其反转(使用 ~ 运算符),然后使用 RGB 值“与”(&) 该掩码,从而清除 8 位红色并保持其他位不变。接下来,将参数值(在本例中为红色)左移相同位数(在红色情况下为 16),并将移位后的值“或”(|) 转换为像素值。
int getRed(){
red = (Pixel>>16);
red = ~Pixel;
red = Pixel<<16 | Pixel;
return red;
}
按照指示我做错了什么?
最佳答案
这里的问题似乎是理解赋值如何工作的一个基本问题(在 Java 中......以及几乎所有命令式编程语言!)。例如:
red = (Pixel>>16);
red = ~Pixel;
也就是说:
将移动 16 位的
Pixel
值分配给red
将按位求反的
Pixel
值分配给red
。这破坏您在上一步中计算的red
值。
如果您想对步骤 1 中计算的值取反,则需要执行以下操作:
red = ~red;
关于java - java 移位位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19215965/