У меня есть несколько изображений в формате TIFF, хранящихся в zip-файле, и я хотел бы прочитать их значения в пикселях в c.Я очень новичок в c, поэтому, пожалуйста, прости хитрый код.Я дошел до того, что у меня есть char *
с содержимым файла TIFF, но я не могу понять, как теперь обрабатывать это с помощью libtiff (или чего-то подобного).Похоже, libtiff требует, чтобы я передал TIFFOpen имя файла для открытия.Я мог бы записать tiff во временный файл, но кажется, что должен быть более эффективный способ.
Пока у меня есть:
#include <stdlib.h>
#include <stdio.h>
#include <zip.h>
#include <string.h>
int main()
{
//Open the ZIP archive
int err = 0;
struct zip *z = zip_open("test.zip", 0, &err);
// Determine how many files are inside and iterate through them
int num_files = zip_get_num_entries(z, 0);
printf("%u\n", num_files);
int i;
for (i=0; i < num_files; i++)
{
const char * filename;
filename = zip_get_name(z, i, 0);
// If the file name ends in .tif
if (strlen(filename) > 4 && !strcmp(filename + strlen(filename) - 4, ".tif"))
{
printf("%s\n", filename);
// Get information about file
struct zip_stat st;
zip_stat_init(&st);
zip_stat(z, name, 0, &st);
printf("%lld\n", st.size);
// Allocate memory for decompressed contents
char *contents;
contents = (char *)malloc(st.size);
// Read the file
struct zip_file *f = zip_fopen(z, filename, 0);
zip_fread(f, contents, st.size);
zip_fclose(f);
// Do something with the contents
// Free memory
free(contents);
}
}
//And close the archive
zip_close(z);
}
РЕДАКТИРОВАТЬ: Мой вопрос похож на этот , но принятый ответ там относится к c ++, и я не уверен, какперевести его на прямую c.