У меня проблемы с сохранением изображений PNG.
Я хочу добавить некоторые двоичные данные в файл png, например следующую структуру.
struct Foo
{
int value;
char str[10];
double val;
double val2;
};
Кажется, просто отлично сохранился следующий код. Однако, когда я позже загружаю файл png, я вижу, что мой кусок не был сохранен, его нет. Что я делаю неправильно? Мои потребности просты, я просто хочу добавить немного дополнительной двоичной информации в само изображение.
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);
}
Выше показано, что буфер был обновлен правильно и мои данные встроены в изображение. I
Однако, когда я позже загрузлю его, его уже нет. Вот как я снова загружаю его из сохраненного 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
исчез.