3

在 C++ 中使用 libtiff 读取 tiff 文件:防止警告打印输出

读取 tiff 文件时,每当函数 TIFFReadDirectory() 读取未知标签时,我都会在控制台收到一条警告消息。从用户 Borovsky 提供的答案中,我了解到为了防止这种情况,我需要:

“首先创建从 TiffErrorHandler 继承并重载 WarningHandler 和 WarningHandlerEx 方法的类。基本上,您在这些方法中无能为力。然后使用 SetErrorHandler 方法将您的类的实例设置为库的错误处理程序。该方法是静态的,您可以在打开图像之前设置错误处理程序。“ 问题是我是 C++ 的初学者,虽然我了解如何实现上述内容,但我似乎无法找到这个 TiffErrorHandler 类。我的代码如下所示:

class myTiffErrorHandler : public TIFFErrorHandler {  <- THE CLASS CANNOT BE FOUND

  public: 
      void WarningHandler() { }  
      void WarningHandlerEx() { } 

};

然后我在 main() 中所做的就是:

Main() {

   tif = TIFFOpen(“fn.tif”, "r"));  

int numOfFrames=0;

    do {
        numOfFrames++;
    } while (TIFFReadDirectory(tif));
}

有人可以帮我解决这个问题吗?我做错了什么,这个类在哪里定义?

谢谢

4

1 回答 1

2

您提到的答案是在面向对象的包装器中使用 C# 的 libtiff,这与您使用 C++ 的情况不同。您需要做的是定义一个虚拟警告/错误处理程序,如下所示:

void DummyHandler(const char* module, const char* fmt, va_list ap)
{
    // ignore errors and warnings (or handle them your own way)
}

然后使用该函数TIFFSetWarningHandler替换默认处理程序,如下所示:

main() 
{
    // disable warnings
    TIFFSetWarningHandler(DummyHandler);

    tif = TIFFOpen("fn.tif", "r");  

    int numOfFrames=0;

    do {
        numOfFrames++;
    } while (TIFFReadDirectory(tif));
}

请注意,您也可以TIFFSetWarningHandler使用NULL参数进行调用,但我喜欢使用#ifdef仅在 Release 版本中退出的处理程序,以便我仍然可以在 Debug 版本中看到警告。

于 2014-05-21T14:17:35.693 回答