将颜色值从float 0..1转换为byte 0..255

前端之家收集整理的这篇文章主要介绍了将颜色值从float 0..1转换为byte 0..255前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
将颜色值从float转换为byte的正确方法是什么?起初我以为b = f * 255.0应该这样做,但现在我想,在这种情况下,只有精确的1.0将被转换为255,但0.9999已经是254,这可能不是我想要的……

似乎b = f * 256.0会更好,除非它会在精确1.0的情况下产生256的不需要的情况.

最后我用这个:

#define F2B(f) ((f) >= 1.0 ? 255 : (int)((f)*256.0))

解决方法

1.0是唯一可能出错的情况,所以单独处理该案例:
b = floor(f >= 1.0 ? 255 : f * 256.0)

此外,值得强制的是,f确实为0 <= f <= 1以避免由于舍入误差导致的不正确行为(例如,f = 1.0000001).

f2 = max(0.0,min(1.0,f))
b = floor(f2 == 1.0 ? 255 : f2 * 256.0)

替代安全解决方

b = (f >= 1.0 ? 255 : (f <= 0.0 ? 0 : (int)floor(f * 256.0)))

要么

b = max(0,min(255,(int)floor(f * 256.0)))

猜你在找的CSS相关文章