gpt4 book ai didi

c++ - 保存 PNG 图像

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:46 36 4
gpt4 key购买 nike

我在保存 png 图像时遇到问题。

我想在png文件中添加一些二进制数据,比如下面的结构。

struct Foo
{
int value;
char str[10];
double val;
double val2;
};

使用以下代码似乎可以很好地保存。但是,当我稍后加载 png 文件时,我发现我的 block 没有保存,它已经消失了。我究竟做错了什么?我的需求很简单,我只想在图像本身中嵌入一些额外的二进制信息。

Foo foo;

png_unknown_chunk chunks[1];
strcpy((png_charp)chunks[0].name, "fFoo");
chunks[0].data = &foo;
memcpy(chunks[0].data,&foo,sizeof(Foo)*1);
chunks[0].size = sizeof(Foo);
png_set_unknown_chunks(png_ptr, info_ptr, chunks, 1);

printf("1: %d\n",(int)info_ptr->unknown_chunks_num);
for (int n = 0; n < info_ptr->unknown_chunks_num; ++n)
{
tag_pngmeta p;
memcpy(&p,info_ptr->unknown_chunks[n].data,info_ptr->unknown_chunks[n].size);

printf("2: %s,%d\n",info_ptr->unknown_chunks[n].name,
(int)info_ptr->unknown_chunks[n].size);

printf("3: %s\n",p.name);
}

上面显示缓冲区已正确更新并且我的数据已嵌入到图像中。我

但是,当我稍后加载它时,它不见了。这是我如何从保存的 png 中再次加载它。

png_unknown_chunkp unknowns;
int num_unknowns = (int)png_get_unknown_chunks(png_ptr, info_ptr, &unknowns);
printf("%d-----\n",(int)num_unknowns);

printf("%d\n",(int)info_ptr->unknown_chunks_num);
for (int n = 0; n < info_ptr->unknown_chunks_num; ++n)
{
printf("%s,%d\n",info_ptr->unknown_chunks[n].name, (int)info_ptr->unknown_chunks[n].size);
}

Foo 消失了。

最佳答案

http://www.libpng.org/pub/png/libpng-1.2.5-manual.html说:

You can use the png_set_unknown_chunks function to queue up chunks for writing. You give it a chunk name, raw data, and a size; that's all there is to it. The chunks will be written by the next following png_write_info_before_PLTE, png_write_info, or png_write_end function. Any chunks previously read into the info structure's unknown-chunk list will also be written out in a sequence that satisfies the PNG specification's ordering rules.

你调用的是它提到的三个 png_write_* 函数中的任何一个吗? png_set_unknown_chunks 似乎不自己写。

关于c++ - 保存 PNG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301177/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com