Чтение файла .tiff в c изнутри zip

У меня есть несколько изображений 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);
}

РЕДАКТИРОВАТЬ: мой вопрос похож на этот, но принятый ответ относится к С++, и я не уверен, как перевести его на прямо в.


person lac    schedule 20.02.2019    source источник
comment
Сохранить данные tiff во временный файл и указать путь к этому файлу?   -  person Shawn    schedule 21.02.2019
comment
Возможный дубликат C++ LibTiff - чтение и сохранение файла из и на память   -  person adrtam    schedule 21.02.2019
comment
@Shawn Да, я знаю, что могу сохранить во временный файл, но мне кажется, что это будет медленно по сравнению с тем, если бы я мог делать все это в памяти.   -  person lac    schedule 21.02.2019
comment
Я бы сказал, сначала заставьте его работать и посмотрите, особенно если для этого требуется всего час или два работы.   -  person Michael Dorgan    schedule 21.02.2019