一般情况下,为什么我们先左移,然后又右移呢?它是否与确保像素值为正相关?代码片段->
for(k=0; k<Width; k++)
{
if(shiftFlag != 8)
{
p1 = pix_rgb[i][2*k] << 24;
p2 = (pix_rgb[i][2*k+1] <<24 ) >>> 8;
tempCount = p1 | p2;
tempCount = tempCount >>> 16;
}
else
tempCount = (pix_rgb[i][k] << 24) >>> 24;
if(tempCount>maxBand[i])
maxBand[i]=tempCount;
if(tempCount<minBand[i])
minBand[i]=tempCount;
}发布于 2019-12-19 15:49:19
根据pix_rgb的名称,我假设pix_rgb[i][k]持有一种通常在32位(即int大小)上的int表示颜色。
AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB
| | | |
| | | blue
| | green
| red
alpha/transparency 通过pix_rgb[i][k] << 24,您正在将所有位移到左边,并将最右的24位设置为0。
所以AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB会变成
BBBBBBBB000000000000000000000000
^^^^^^^^^^^^^^^^^^^^^^^^ <<24现在,使用(pix_rgb[i][k] << 24) >>> 24,您可以将其看作是BBBBBBBB000000000000000000000000 >>> 24,其中您正在向右移动位,但同时保证大多数左位将填充0(如果我们使用>> 24,我们可以用1填充它,如果第一个B也是1)。
所以BBBBBBBB000000000000000000000000会变成
000000000000000000000000BBBBBBBB
^^^^^^^^^^^^^^^^^^^^^^^^ >>>24换句话说,我们得到了int,它保存的值只表示,只表示蓝色。
总之
pix_rgb[i][k] << 24用于删除所有位,但BBBBBBBB >>>24用于将BBBBBBBB设置为较低的int索引,因此我们可以将其视为0-255范围内的值。https://stackoverflow.com/questions/59412759
复制相似问题