Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 复制图像原始数据_C_Image - Fatal编程技术网

C 复制图像原始数据

C 复制图像原始数据,c,image,C,Image,每次发生更改时,我都会从一个线程获得一个指向原始图像数据的指针,我想在另一个线程使用它之前复制它。如果我不知道原始数据的大小,因为它会随机选择一个大小并给出原始数据,那么如何实现这一点?如何从该指针复制原始数据?要复制原始指针“数据”,您需要其他信息:该数据的大小。原始数据指向一个图像,因此在创建时您已经有了宽度和高度;如果这不是8位/像素图像,也可能有一个bpp(每像素字节数)。将这三者相乘将得到原始数据大小 当前,您仅转发原始数据的地址。要访问其他变量,还需要转发其余变量 一个选项(根据我的

每次发生更改时,我都会从一个线程获得一个指向原始图像数据的指针,我想在另一个线程使用它之前复制它。如果我不知道原始数据的大小,因为它会随机选择一个大小并给出原始数据,那么如何实现这一点?如何从该指针复制原始数据?

要复制原始指针“数据”,您需要其他信息:该数据的大小。原始数据指向一个图像,因此在创建时您已经有了
宽度
高度
;如果这不是8位/像素图像,也可能有一个
bpp
(每像素字节数)。将这三者相乘将得到原始数据大小

当前,您仅转发原始数据的地址。要访问其他变量,还需要转发其余变量

一个选项(根据我的评论)是将
malloc
ed原始数据大小扩展为存储
width
height
(可选地,
bpp
)所需的大小,并从一开始就存储这些数据

更好的方法(因为更易于管理)是创建一个
结构

struct myData_t {
   int width;
   int height;
   void *data;
} myData, *myDataPtr;
用数据填充此结构,并将其地址返回给其他函数


请记住按照正确的顺序进行内存清理:首先,释放
myDataPtr->data
,然后才释放
myDataPtr
本身。

如果您不知道指向多少数据,并且没有EOT标记,则无法可靠地执行此操作。指向原始数据的指针不会显示其大小。因此,解决方案很简单:您必须添加一个机制来转发大小。。。例如,将“原始数据”的大小扩展一个int,然后将大小写入这个int。那么我该怎么做呢?如果我可以计算转储图像的宽度和高度,这是制作此指针副本的可靠方法。如果您知道总字节数(我假设您可以从宽度*高度*Bpp计算),那么您可以执行简单的
malloc
memcpy
。您必须复制它吗?通常,通过将地址和指针立即由malloc重置,或者从空闲池弹出一个缓冲区或索引,将这样大的缓冲区通知给其他线程。memcpy是多余和浪费的。