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

时间:2014-05-21 14:05:26

标签: c++ tiff multipage libtiff

在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));
}

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

由于

1 个答案:

答案 0 :(得分: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,但我喜欢在Release版本中使用#ifdef的处理程序,以便我仍然可以在Debug版本中看到警告。