【发布时间】:2015-08-19 20:35:41
【问题描述】:
我有一个函数需要返回一个 16 位无符号整数向量,但对于另一个我也称之为这个函数的函数,我需要 8 位无符号整数向量格式的输出。例如,如果我开始:
std::vector<uint16_t> myVec(640*480);
如何将其转换为以下格式:
std::vector<uint8_t> myVec2(640*480*4);
更新(更多信息): 我正在使用 libfreenect 及其 getDepth() 方法。我已经修改它以输出一个 16 位无符号整数向量,以便我可以检索以毫米为单位的深度数据。但是,我还想显示深度数据。我正在使用 freenect 安装中的一些示例代码 c++,它使用 glut 并且需要 8 位无符号整数向量来显示深度,但是,我需要 16 位来检索以毫米为单位的深度并将其记录到文本文件中。因此,我希望在 glut 的 draw 函数中将数据检索为 16 位无符号整数向量,然后将其转换,以便我可以使用已经编写的 glut 函数显示它。
【问题讨论】:
-
需要更多信息。 8 位值与 16 位值有何关系?
-
如果不复制数据(即您想重新分配所有权并重新解释底层缓冲区的类型),这非常困难,因为
std::vector没有公开任何外部覆盖其内部缓冲区的方法指针。 -
您想要做的不仅仅是将 16 位数字转换为 8 位数字,请参阅我的答案了解更多信息
-
所以你在 both 向量中有相同数量的值,对吧?如何将单个值从 16 位转换为 8 位?它们是否需要以某种方式缩放?最大 16 位值是否需要映射到最大 8 位值(例如)?
-
@Galik 他做到了,这就是我在回答中的意思。他需要某种亮度传递函数来将他的数据集映射为在图像中具有某种含义的值。
标签: c++