Вот закрытие, которое вы можете получить для сканирования всех тегов:
#include "LibTIFF/tif_dir.h"
...
TIFFDirectory *td = &tif->tif_dir;
for (int fi = 0, nfi = tif->tif_nfields; nfi > 0; nfi--, fi++) {
const TIFFFieldInfo* fip = tif->tif_fieldinfo[fi];
// test if tag value is set
// (lifted directly form LibTiff _TIFFWriteDirectory)
if( fip->field_bit == FIELD_CUSTOM ) {
int ci, is_set = FALSE;
for( ci = 0; ci < td->td_customValueCount; ci++ )
is_set |= (td->td_customValues[ci].info == fip);
if( !is_set )
continue;
} else if(!TIFFFieldSet(tif, fip->field_bit))
continue;
// else: process the fip->field_tag
}
Обратите внимание, что вам придется учитывать, что некоторые теги будут появляться дважды (версия LONG и SHORT), , но только один из них будет иметь значение. Правильный тип для использования можно найти во включенном заголовке (структура TIFFDirectory).
Там также есть другие уловки о том, как читать теги, но это по крайней мере заставит вас перебрать все из них (стандартные). Смотрите tif_dirinfo.c для указателей, если вы застряли.