【问题标题】:convert floating point number to RGB or HEX将浮点数转换为 RGB 或 HEX
【发布时间】:2013-11-12 05:53:02
【问题描述】:

我从PCD DATA FORMAT 中提取了以下浮点数8.8489784e-39,它表示点云的一个点的RGB 值。

我必须将其直接转换为 HEX 或 Int->RGB 或任何方式。我搜索了网络,但无法将任何东西放在一起,因为我在 javascript 中使用浮点运算的经验相当有限。

【问题讨论】:

  • 应该使用什么算法进行转换? RGB 值通常为 0-255(十进制)或 0-FF(十六进制),上面的值基本上为零。如果它是米,它比电子的直径(~1.0e-15 m)小数万亿倍。
  • 我不确定,我只有链接中的信息。检查链接,他们提供了一个例子。我什至不知道我必须如何解释这些数据。
  • 就像@RobG 说的,他们提供的值很奇怪。如果您阅读了您链接到的那个网站,那么浮点数似乎是 rgb 值,但这根本没有任何意义。
  • 您可能想在此处阅读对话:Bug in PCD-viewer's display of color point clouds? Or am I doing something wrong? 。似乎这些值可能会被修改:“保存包含 rgb 字段的点云时,请使用二进制而不是 ascii 格式。由于 rgb 被打包存储为浮点数,并且将浮点数存储为 ascii 可以引入最小位的变化,某些像素的单个 (r,g,b) 值有时最终会发生显着改变”
  • 不确定这有多大用处,但是:JS 在百分之一的地方开始搞砸了。如果进行任何类型的数学运算,那将解释一个接近于零的数字。例如。 1.15-1.14-.01 = 8.673617379884035e-18.

标签: javascript floating-point hex rgb


【解决方案1】:

所以我猜这是红色、绿色和蓝色各一个字节,存储在一个 4 字节字的前三个字节中,然后莫名其妙地解释为浮点数而不是 int。

如果是这种情况,那么 8.8489784e-39f 表示 RGB 三元组 (90,91,96) [十进制] 或 #5a5b60 网络十六进制。

但是在 Javascript 中进行这种转换并不容易。你可以看看decodeFloat定义的here的转换函数,或者你可以从this question的答案开始。

【讨论】:

  • 似乎这些值被存储为压缩浮点数,然后转换为 ASCII,这显着改变了值。因此,即使您的转换是正确的(而且很可能是正确的),价值已经不可挽回地被淘汰了。 :-(顺便说一句,后面的“f”是错字吗?
  • 我从用于解码浮点数的 C 程序中复制并粘贴了常量,这就是 -f 的来源。通常,C 中的浮点字面量生成双精度值,但尾随的 -f 使它们只有单精度。
猜你喜欢
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2023-04-09
  • 1970-01-01
  • 2018-02-25
  • 2013-04-03
  • 2016-08-11
相关资源
最近更新 更多