我有一个扁平的 (1D) U32 编码图像阵列,其中 r、b 和 b 8 位通道值被编码到每个 U32 的前 24 位中。我想将此数组扩展为 U8 数组,每个 U8 都存储一个单独的 r、g 或 b 值(0-255)。问题是我需要这种情况发生得非常快(在旧计算机上每秒数百次),而我创建的方法很慢。
我是labview 的新手,所以我不确定有什么更快的方法来做到这一点。
我通过创建一个 U8 数组、迭代 U32 Image 数组的每个索引并使用移位寄存器将相应的 3 个 rgb 值分配给 U8 数组中的适当索引来成功地实现了这一点。我尝试使用 In Place Element Structure(这可能不需要像 shift 这样的循环之间复制数据),但我不知道如何让它在循环内工作,当我试图从循环中返回最后一个数组时,只有最后一个元素被修改。
这是我上面描述的第一种工作方法:
在 c/c++ 中,它会非常简单(像这样):
uint8_t* convert_img(uint32_t img[640*480]){
uint8_t *img_u8 = new uint8_t[640*480*3];
for (int i=0; i<640*480; ++i){
img_u8[i*3] = img[i] & 0xff; // r
img_u8[i*3 + 1] = (img[i] >> 8) & 0xff; // g
img_u8[i*3 + 2] = (img[i] >> 16) & 0xff; // b
}
return img_u8;
}
上面的工作 labview 示例仅以 20 Hz 运行!我认为对于这样一个简单的操作来说这非常慢。有没有更多经验的人建议我如何使用labview代码快速实现这一点?