Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何读取自定义TIFF标签(不含TIFF字段信息)_C++_C_Tiff_Libtiff - Fatal编程技术网

C++ 如何读取自定义TIFF标签(不含TIFF字段信息)

C++ 如何读取自定义TIFF标签(不含TIFF字段信息),c++,c,tiff,libtiff,C++,C,Tiff,Libtiff,我正在尝试读取tiff文件中的自定义标记 关于这个主题的说明很少,但他们使用的是一个名为TIFFFieldInfo的接口(结构)。我已经读过了,TIFFFieldInfo再次出现。 我可以同意,但他们()说,这个接口已经过时了。你能给我建议一些合理的选择吗? 还是我只是误读了头文件?最终我找到了解决方案。 手册()说明了我们所需要的一切。请参阅自动注册标签会话。以下是复制粘贴的一个 如果在上面的表中找不到标记,则自动注册标记 表示这是一个不受支持的标记,不直接 由libtiff(3TIFF)库支

我正在尝试读取tiff文件中的自定义标记

关于这个主题的说明很少,但他们使用的是一个名为TIFFFieldInfo的接口(结构)。我已经读过了,TIFFFieldInfo再次出现。 我可以同意,但他们()说,这个接口已经过时了。你能给我建议一些合理的选择吗?
还是我只是误读了头文件?

最终我找到了解决方案。 手册()说明了我们所需要的一切。请参阅自动注册标签会话。以下是复制粘贴的一个

如果在上面的表中找不到标记,则自动注册标记 表示这是一个不受支持的标记,不直接 由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;indexstd::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");