Как сохранить значения тега char * в libexif - PullRequest
0 голосов
/ 27 марта 2019

У меня проблема с libexif сохранением строковых данных тегов.Я выделяю память для строкового значения, используя strcpy, а затем просто присваиваю указатель на конкретные теги entry-> data.Проблема в том, что при сохранении с exif_data_save_data и fwrite я получаю строковое значение, сокращенное до 7 символов.Если я сначала загружу все эти данные из файла с более длинным строковым значением для этого конкретного тега exif (в частности, EXIF_TAG_NAME), максимальная строка len len будет отличаться.

static char* get_c_str(QString qs)
{
    QByteArray *qba = new QByteArray(qs.toLatin1());
    char* str = (char *)malloc(qba->count());
    strcpy(str,qba->data());

    return str;
}


static ExifEntry *init_tag(ExifData *exif, ExifIfd ifd, ExifTag tag)
{
    ExifEntry *entry;

    if (!((entry = exif_content_get_entry (exif->ifd[ifd], tag)))) {

        entry = exif_entry_new ();
        assert(entry != NULL); 
        entry->tag = tag;

        exif_content_add_entry (exif->ifd[ifd], entry);

        exif_entry_initialize (entry, tag);

        exif_entry_unref(entry);
    }
    return entry;
}

void MainWindow::on_writeButton_clicked()
{
    if(!buf)
        return;

    ent = init_tag(ed,ExifIfd::EXIF_IFD_0,ExifTag::EXIF_TAG_MODEL);
    ent->data = (unsigned char*)get_c_str(ui->modelL->text());

    ................................................

    exif_data_save_data(ed, &exifData, &exifDatLen);

    f = fopen(path, "wb");

    fwrite(exif_header,exif_header_len,1,f);

    fputc((exifDatLen+2)>>8,f);
    fputc((exifDatLen+2) & 0xff, f);

    fwrite(exifData,exifDatLen,1,f);
    fwrite(buf+image_data_offset,flen,1,f);

    fclose(f);
}

Ожидаемая модель камеры будет "Canon EOS 5D"Марк II ", но был" Canon E "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...