1
我想要读取tiff文件中的自定义标签。如何阅读自定义TIFF标签(不带TIFFFieldInfo)
关于这个主题的指令很少,但是AFAIK他们使用一个名为TIFFFieldInfo的接口(结构体)。我已经阅读了documentation,并再次出现了TIFFFieldInfo。 我可以用它,但他们(the library)说,该接口是OBSOLETED。你能建议我合理的选择吗? 或者我只是误解了头文件?
我想要读取tiff文件中的自定义标签。如何阅读自定义TIFF标签(不带TIFFFieldInfo)
关于这个主题的指令很少,但是AFAIK他们使用一个名为TIFFFieldInfo的接口(结构体)。我已经阅读了documentation,并再次出现了TIFFFieldInfo。 我可以用它,但他们(the library)说,该接口是OBSOLETED。你能建议我合理的选择吗? 或者我只是误解了头文件?
最后我找到了解决方案。 说明书(TIFFGetField(3tiff))说明了我们所需要的一切。参见AUTOREGISTERED TAGS会话。以下是复制粘贴的一个。
AUTOREGISTERED标签。如果你不能找到在 上表中的标记,则意味着这是一个不受支持的标签,而不是直接的libtiff(3TIFF)库支持 。如果您知道该标签的数据类型,您仍然可以阅读 它的值。例如,如果您 想从 读取标签33424和ASCII字符串的LONG值,可以使用下面的代码标签36867:
uint32 count; void *data; TIFFGetField(tiff, 33424, &count, &data); printf("Tag %d: %d, count %d0", 33424, *(uint32 *)data, count); TIFFGetField(tiff, 36867, &count, &data); printf("Tag %d: %s, count %d0", 36867, (char *)data, count);
例如,我需要阅读标签,它是双层,所以我用下面的代码(但我没有检查):
tiff *tif = TIFFOpen("ex_file.tif", "rc"); // read tif
static ttag_t const TIFFTAG_SOMETAG = 34362; // some custom tag
if(tif != nullptr) // if the file is open
{
uint count; // get count
double *data; // get data
if(TIFFGetField(tif, TIFFTAG_SOMETAG, &count, &data) == 1) // read tag
throw std::logic_error("the tag does not exist.");
// print the values (caution: count is in bytes)
for(int index = 0; index < count/sizeof(double); ++index)
std::cout << data[index];
TIFFClose(tif); // close the file
}
else
throw std::runtime_error("cannot open the file");
如果你不能找到任何UPTODATE库,从头开始编写一个TIFF信息的读者是不是很难;该文件非常简单。 (我是在一年前制作的;我会看看我能否找到源代码,但现在可能已经过时了。) –