"无损"浮动到BYTE转换

and*_*and 1 c c++ math casting

我正在使用libnoise在1024x1024地形网格上生成Perlin噪声.我想将它的浮点输出转换为0到255之间的BYTE.问题最终是数学问题:如何将实际区间(-1,1)中的值转换为最小化损失的整数1(0,255)?

Mar*_*ers 5

如果您的输入范围不包括端点,此公式将为您提供[0,255]中的数字:

(int)((x + 1.0) * (256.0 / 2.0))
Run Code Online (Sandbox Code Playgroud)

如果你包括端点(然后它通常写为[-1,1]而不是(-1,1)),你将需要一个特殊的情况来x == 1.0将其舍入到255.