最近我在 Webkit 源代码中发现了一个有趣的事情,它与颜色转换有关(从 HSL 转换为 RGB):
http://osxr.org/android/source/external/webkit/Source/WebCore/platform/graphics/Color.cpp#0111
const double scaleFactor = nextafter(256.0, 0.0); // it's here something like 255.99999999999997
// .. some code skipped
return makeRGBA(static_cast<int>(calcSomethingFrom0To1(blablabla) * scaleFactor),
该链接指向一个名为kpEffectHSV.cpp的文件,属于kolourpaint图像编辑器中的效果库。(int)(value * 255.999999)
这种技术的使用是否正确?为什么不直接使用round(blabla * 255)之类的方法呢?这是C/C++的特性吗?严格来说,它并不能总是返回正确的结果,在100个案例中只有27个正确。请参见https://docs.google.com/spreadsheets/d/1AbGnRgSp_5FCKAeNrELPJ5j9zON9HLiHoHC870PwdMc/edit?usp=sharing电子表格。请有人解释一下——我认为这应该是一些基础知识。