java - (k<<24)>>>24在遥感图像读取中有何意义?

标签 java image-processing

一般来说,为什么我们先将其左移,然后又右移? 它与确保像素值为正之类的事情有关吗? 代码被剪断->

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/

相关文章:

java - 从字节数组获取像素值

image-processing - 什么是查找图像最 "interesting"部分的合理性能算法?

python - hsv_to_rgb 不是 matplotlib 上 rgb_to_hsv 的倒数

python - 如何从图像转换中计算张量乘数?

java - Dropbox 数据存储 API : Reliably determining if the user is authenticated

java - 从两个自定义对象列表中删除公共(public)元素

java - 如何让一个句子超时?

Java计算器历史功能

PHP 动态调整图像大小(即时)

java - 按共同值对不同对象进行排序