谁能解释这个图像分辨率设置代码?这里到底发生了什么



我正在努力理解别人的原始图像管理代码。

这是我正在看的:

// Resolution has to be a power of 2. 
// This code finds the lowest RxR resolution which has equal or more pixel than requested
uint32_t higher = std::max(resolutionX, resolutionY);
higher--;
higher |= higher >> 1;
higher |= higher >> 2;
higher |= higher >> 4;
higher |= higher >> 8;
higher |= higher >> 16;
higher++;
internResolution = higher;

我理解|=是位或运算符,>>是右移位运算符。我不明白的是为什么最初的代码是这样设计的。我认为这推动Resolution是2的完美因子,我假设这是为了保持像素完美的整数比例逻辑,但这段代码似乎是一种奇怪的方式来达到那里。

谁能解释一下这里发生了什么,为什么要这样设计?这是求大于等于n的2的最小次幂的深奥方法吗

比2的幂小1的数左边全为0,右边全为1(如1112= 7, 111111112= 255)

|=操作符的序列将确保对于输入中的任何设置位,其右侧的所有位也将被设置-首先,将每个位向右复制1,然后将每对位向右复制2,然后再向右复制4,等等。结果将是一个比2的幂小1的数,并且它不会将任何位复制到左边,因此它将是该形式下一个最大的数。

所以,减去1,计算下一个1小于2的幂,然后加1,确实,你得到了下一个2的幂>=原始输入,以一种有效的方式。

最新更新