复制图像原始数据

标签 c image

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

最佳答案

要复制原始指针“数据”,您需要额外的信息:此数据的大小。原始数据指向一个图像,因此您在创建时已经有了 widthheight;如果这不是 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/

相关文章:

c - 使用 Netfilter 封装和解封装 IPv4 数据包

html - 在 CSS 中显示带有文本的内联图像

image - 从Hadoop sequenceFile获取原始图像时出错

objective-c - UIImageView.image 大于 UIImageView

c - 如何生成大的随机数 C

c - 为什么我不能创建不透明数据类型?

c# - 数据绑定(bind)后如何将图像设置为数据 GridView 单元格?

javascript - 使用 Spring mvc 和 Angular JS 显示数据库中的图像列表

在c中本地使用指针调用和返回函数

android - C: 如何在 android 中解析 XML?