C++ 如何读取自定义TIFF标签(不含TIFF字段信息)
我正在尝试读取tiff文件中的自定义标记 关于这个主题的说明很少,但他们使用的是一个名为TIFFFieldInfo的接口(结构)。我已经读过了,TIFFFieldInfo再次出现。 我可以同意,但他们()说,这个接口已经过时了。你能给我建议一些合理的选择吗?C++ 如何读取自定义TIFF标签(不含TIFF字段信息),c++,c,tiff,libtiff,C++,C,Tiff,Libtiff,我正在尝试读取tiff文件中的自定义标记 关于这个主题的说明很少,但他们使用的是一个名为TIFFFieldInfo的接口(结构)。我已经读过了,TIFFFieldInfo再次出现。 我可以同意,但他们()说,这个接口已经过时了。你能给我建议一些合理的选择吗? 还是我只是误读了头文件?最终我找到了解决方案。 手册()说明了我们所需要的一切。请参阅自动注册标签会话。以下是复制粘贴的一个 如果在上面的表中找不到标记,则自动注册标记 表示这是一个不受支持的标记,不直接 由libtiff(3TIFF)库支
还是我只是误读了头文件?最终我找到了解决方案。 手册()说明了我们所需要的一切。请参阅自动注册标签会话。以下是复制粘贴的一个 如果在上面的表中找不到标记,则自动注册标记 表示这是一个不受支持的标记,不直接 由libtiff(3TIFF)库支持。你仍然能够阅读 如果知道该标记的数据类型,则该值为。例如,如果你 要从标记33424和ASCII字符串中读取长值吗 标签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”);//阅读tif
静态ttag\u t const TIFFTAG\u SOMETAG=34362;//一些自定义标签
if(tif!=nullptr)//如果文件已打开
{
uint count;//获取计数
double*data;//获取数据
if(TIFFGetField(tif,TIFFTAG\u SOMETAG,&count,&data)==1)//读取标记
抛出std::logic_错误(“标记不存在”);
//打印值(注意:计数以字节为单位)
对于(int index=0;index std::cout如果你找不到任何最新的库,那么从头开始编写TIFF信息阅读器并不难;文档非常简单。(我一年前制作的;我会看看是否能找到源代码,但现在可能已经过时了。)
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");