c++ - 谁能解释一下这个图像分辨率设置代码?这到底是怎么回事

标签 c++ image image-processing

我正在尝试理解其他人的原始图像管理代码。

这是我正在查看的内容:

// 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 因数,并且我假设这将维持 Pixel perfect integer ratio logic ,但是这段代码似乎是一种奇怪的实现方式。

有人可以解释一下这里发生了什么,以及为什么要这样设计吗?这只是一种到达 "Smallest power of 2 greater than or equal to n" 的深奥方式吗?

最佳答案

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

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

因此,减一,计算下一个小于二的幂,然后加一,实际上,您将得到下一个二的幂 >= 原始输入,在有效的方法。

关于c++ - 谁能解释一下这个图像分辨率设置代码?这到底是怎么回事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66540931/

相关文章:

image-processing - 图像分割、分水岭、瀑布、p算法

image-processing - 如何让 golang 读取 jpeg 并获得与 Python/C 相同的 unit8 值?

c++ - 如何检查一个字节是否包含特定的位模式?

image - SailsJS 用户上传图片

javascript - 如果图像未正确加载,如何显示默认图像?

image - 在 Ubuntu 中基于图像 (PNG) 的内容创建一个唯一的哈希值?

c++ - 当绑定(bind)发生在另一个函数中时,Sqlite _only_ 找不到行

c++ - 如何设置 Visual Studio C++ "default default"项目设置

c++ - 在客户端-服务器应用程序中使用 Active Directory 对用户进行身份验证

matlab - 使用 MatLab 计算图像上的对象数量