c++ - 将浮点值转换为 RGB 值

标签 c++ opengl rgb data-conversion

我有一个数据集,其中包含从 10^(-7) 到 10^(0) 的 700 万个浮点正值。我想以“线性方式”将浮点值转换为 RGB 值。直到现在我使用 [255-const*|log(float value)|]/255 并且它有效,但我想知道是否有一种方法可以在不使用对数的情况下转换值,也许(我希望如此)如果是否有一个 OpenGL 库可以在 GPU 的基础上做这件事。

编辑1: 值从 10^(-7) 到 10^(1)。我想以最快的方式获得转换,因为我需要一个快速的程序(这就是我想使用 GPU 的原因)。

编辑2: 没有一个 OpenGL 函数可以通过给出最大值和最小值来缩放您的值吗? 我有一个带有用户界面的程序,我想在程序运行时更改“值窗口”。 我想要这样的东西 Computerized tomography

EDIT3:这对我有帮助吗? http://glm.g-truc.net/0.9.3/api/a00157.html/

EDIT4:我想在 Matlab 中获得类似 Jet 颜色图的东西 http://blogs.mathworks.com/images/loren/73/colormapManip_14.png

最佳答案

我想这取决于您实际拥有这些值的位置。如果您在 OpenGL 中生成它们,那么您可以在 OpenGL 中执行转换,这会很快,然后提取数据。如果您在 CPU 内存中,将数据移入和移出 GPU 内存也需要一些时间。

对于这种循环,如果您使用优化 -O3 进行编译,编译器通常会对代码进行矢量化优化(参见 What is "vectorization"?)。这应该适用于 GCC、MSVC 和其他编译器。检查编译器的特定矢量化功能。

关于c++ - 将浮点值转换为 RGB 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37924915/

相关文章:

python - 手动将 RGB 转换为灰度

c++ - 尝试设置 char 数组的字符时程序崩溃

C++ 二进制文件 - 写入整数 - 奇怪的行为

c++ - is_move_constructible 和 msvc2013

c++ - OpenGL 还是 DirectX?

c++ - CGAL 在网格中找到内部点

c++ - 缓冲区损坏?

c++ - glPush/PopMatrix() 和 glRotatef() 似乎是单独移动对象,而不是 glPush/PopMatrix() 中包含的所有对象

android - 将 Android camera2 api YUV_420_888 转换为 RGB