每次发生更改时,我都会从一个线程获得一个指向原始图像数据的指针,我想在另一个线程使用它之前制作它的副本。如果我不知道原始数据的大小,我怎么能做到这一点,因为它随机选择一个大小并提供原始数据?如何从该指针复制原始数据?
最佳答案
要复制原始指针“数据”,您需要额外的信息:此数据的大小。原始数据指向一个图像,因此您在创建时已经有了 width
和 height
;如果这不是 8 位/像素图像,您可能还有 bpp
(每像素字节数)。将这三者相乘将得到原始数据大小。
目前您只是转发原始数据的地址。要访问其他变量,您还需要转发其余变量。
一个选项(根据我的评论)是根据存储宽度
和高度
所需的大小扩展malloc
编辑的原始数据大小(和可选的 bpp
) 并将它们存储在最开始。
更好的方法(因为更易于管理)是创建一个struct
:
struct myData_t {
int width;
int height;
void *data;
} myData, *myDataPtr;
用您的数据填充此结构并将其地址返回给您的其他函数。
请记住以正确的顺序清理内存:首先,释放 myDataPtr->data
,然后才释放 myDataPtr
本身。
关于复制图像原始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23198872/