Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 颜色的浮动RGB值与ubyte RGB值_C++_Graphics - Fatal编程技术网

C++ 颜色的浮动RGB值与ubyte RGB值

C++ 颜色的浮动RGB值与ubyte RGB值,c++,graphics,C++,Graphics,(ubyte是无符号字符) 例如,在颜色类中使用RGB值的浮点值有什么意义?它能提供更高的准确性吗?空间呢?使用float与ubyte的性能优势/障碍是什么 在进行数学运算时,不需要将其转换为浮点值或从浮点值转换为浮点值 按顺序应用多个处理步骤时,可以更准确地保留中间值 具有更大的动态范围和分辨率 浮点是GPU等的自然格式 反对: 需要更多的存储空间 很可能,它确实提供了更高的精度。正如在另一个答案中提到的,不必来回转换也有好处,这反过来会导致中间结果丢失-假设您有一个浮点值为1.0(字节

(ubyte是无符号字符)

例如,在颜色类中使用RGB值的浮点值有什么意义?它能提供更高的准确性吗?空间呢?使用float与ubyte的性能优势/障碍是什么

  • 在进行数学运算时,不需要将其转换为浮点值或从浮点值转换为浮点值
  • 按顺序应用多个处理步骤时,可以更准确地保留中间值
  • 具有更大的动态范围和分辨率
  • 浮点是GPU等的自然格式
反对:

  • 需要更多的存储空间

    • 很可能,它确实提供了更高的精度。正如在另一个答案中提到的,不必来回转换也有好处,这反过来会导致中间结果丢失-假设您有一个浮点值为1.0(字节255)的像素,然后乘以0.65。然后将其转换回整数,即166.75,但我们将四舍五入为166。所以我们输了0.75。如果我们做进一步的计算,误差可能会更大。。。当然,如果某个中间步骤导致我们的值超过255(1.0)或低于0(0.0),则完全可以将新值保留一段时间,然后在需要时“修复”


      当然,您不能在更少的空间中存储更多的数据(通常),因此一个典型的浮点值比一个字节大4倍。一些GPU有16位浮点,其中包含11位尾数和4-5位指数,这使得它们适用于大多数简单的像素数学。但它的大小仍然是两倍,但“精确性”并不是两倍(我的一位同事花了很多时间试图得到一个使用16位浮点值来匹配32位浮点值结果的算法,但一直没有实现)

      不要忘记,在以浮点格式存储颜色时,也可以删除gamma校正。你不必在飞行中这样做,你可以保证大量的
      powf
      调用。那么,在你看来,从长远来看,在ubytes(无符号字符)上使用浮点值真的值得吗?在英语中,我们有一句谚语,那就是“一根字符串有多长”,意思是“我不能回答这个问题”。这完全取决于你在做什么,你是如何做的,以及你定义的“更好”或“值得”。更重要的是,存储,比如说4倍的数据,还是丢失一些信息?您是否有办法对您的实现进行基准测试,并比较这两种解决方案-测量同一组操作的内存使用率和执行速度。非常好的响应!非常感谢您的解释和建议。