一般来说,为什么我们先左移它,然后再次右移? 它是否与确保像素值为正之类的事情有关? 代码截取>
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;
}
根据pix_rgb
的名称,我假设pix_rgb[i][k]
具有int
的重复颜色,通常在 32 位(大小为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
之外的所有位BBBBBBBB
设置回较低的索引int
,因此我们可以将其视为范围 0-255 的值。
>>>24
用于将