浮点RGB值与ubyte RGB值的颜色

时间:2012-12-24 14:29:02

标签: c++ graphics

(ubyte是unsigned char)

在RGB颜色类中使用浮点值的重点是什么?它能提供更高的准确度吗?太空呢?使用float vs ubyte有什么性能优势/障碍?

2 个答案:

答案 0 :(得分:4)

临:

  • 在进行数学运算时不需要转换为浮动数据
  • 在顺序应用多个处理步骤时更准确地保留中间值
  • 更大的动态范围和分辨率
  • float是GPU等的自然格式

缺点:

  • 需要更多存储空间

答案 1 :(得分:3)

尽管如此,它确实提供了更高的精确度。正如在另一个答案中所提到的,不必转换来回也有好处,这反过来会导致失去中间结果 - 假设你的浮点数为1.0(一个字节为255),并且你乘以0.65。然后将其转换回整数,即166.75 - 但我们将其舍入到166.所以我们失去了0.75。如果我们进行一些进一步的数学运算,误差可能会变大......当然,如果某个中间步骤导致我们的值超过255(1.0)或低于0(0.0),那么完全可以保留新的价值一段时间,然后在需要时“修复”。

当然,您不能在较小的空间(通常)中存储更多数据,因此典型的浮点数比一个字节大4倍。一些GPU具有16位浮点数,其中包含11位尾数和4-5位指数,这使得它们适用于大多数类型的简单像素数学运算。但它仍然是规模的两倍,但不是“精确度”的两倍(我的同事花了很多时间试图使用16位浮点数来匹配32位浮点数的结果,而且从未完全达到过) 。