目前我正在研究从C ++到Java的传输图像。
目标位置由Java分配,
源位置是C ++生成的图像,所以。
我有一个
uint8_t* pixelPtr
,我想将此内容移至
__uint8_t* data
没有副本。
我总共有1920 * 1080 * 3字节,所以我想移动而不是复制以便快速计算,我想知道是否有任何技巧方法可以做到这一点? 提前谢谢!
答案 0 :(得分:2)
让我们回顾一下:
只要这两个缓冲区是不同的,就没有"技巧"避免这种情况。 "移动"在这种情况下,将意味着交换指针,但这对底层缓冲区没有任何作用。您只需要复制数据。
首先探索解决方案,例如在目标缓冲区中生成数据,或者使用C ++映像生成函数(或Java代码)公开的适当功能。不幸的是,我们无法从这里推测这些解决方案的可能存在或形式。
答案 1 :(得分:1)
标准的方法是,你应该修改你的C ++代码,这样它就可以创建数据,而不是在任何地方,但是在给定的位置。也就是说,如果你有这样的代码
uint8_t* GenerateImage(...parameters...)
{
uint8_t* output = ... allocate ...
return output;
}
您应该将其更改为接收目的地作为参数
void GenerateImage(...parameters..., __uint8_t* destination)
{
... fill the destination ...
}
后者是更好的C ++设计 - 这样你就不需要创建一个单独的DestroyImage
函数 - 内存完全由Java管理。