一般来说,为什么我们先将其左移,然后又右移? 它与确保像素值为正之类的事情有关吗? 代码被剪断->
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
,如果第一个 B
也为 1,我们可以用 1 填充它)。
所以BBBBBBBB000000000000000000000000
将更改为
000000000000000000000000BBBBBBBB
^^^^^^^^^^^^^^^^^^^^^^^^ >>>24
换句话说,我们得到了 int
它保存代表仅蓝色的值。
简而言之
-
pix_rgb[i][k] << 24
用于删除除BBBBBBBB
之外的所有位 -
>>>24
用于设置BBBBBBBB
回到较低的指数int
所以我们可以将其视为 0-255 范围内的值。
关于java - (k<<24)>>>24在遥感图像读取中有何意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59412759/