首页 文章

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

提问于
浏览
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));
}

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

谢谢

1 回答

  • 2

    您所指的答案是libtiff在面向对象的包装器中使用C#,这与使用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));
    }
    

    请注意,您也可以使用 NULL 参数调用 TIFFSetWarningHandler ,但我喜欢在Release版本中使用 #ifdef 编辑的处理程序,这样我仍然可以在Debug版本中看到警告 .

相关问题