在从RGB图像中分离RGB通道时,& 0xff的意义是什么?

时间:2015-04-20 08:31:20

标签: java image-processing

我有以下代码段

for(int row=0; row<r; row++)
{
    for(int col=0; col<c; col++)
    {
        alphaPixels[row][col] = ((RGBarray[ii]>>24)&0xff);
        redPixels[row][col] = ((RGBarray[ii]>>16)&0xff);
        greenPixels[row][col] = ((RGBarray[ii]>>8)&0xff);
        bluePixels[row][col] = (RGBarray[ii]&0xff);
        ii++;
    }
}

为什么我们必须在移位操作后使用按位AND运算& 0xff

2 个答案:

答案 0 :(得分:2)

  

为什么我们必须使用按位AND运算&#39; &安培; 0xff的&#39;之后   转移操作?

Oxff是十六进制数,等于十进制255。

在您的情况下,& 0xff确保所有像素值范围在0到255之间(即正8位)。例如,如果任何值大于255,则会将其截断为0-255

    int value=257;
    int result = value & 0xff; // result will be 1

因此,它的作用类似于正值的余数运算符%。但是按位运算符&比余数运算符%更快。

    int result = value % 256; //You will get same result for positive value 

答案 1 :(得分:1)

0xff的整数值为255。

>> n右移数字n位,&运算符执行按位 AND操作。

所以& 0xff掩盖变量。它只留下最后 8 位的值,并忽略所有其余位。

当您尝试将颜色值从特殊格式转换为标准RGB值(因为它具有8位)时,这是一个常见的技巧。