在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));
}
有人可以帮我解决这个问题吗?我做错了什么,这个类在哪里被定义?
由于
答案 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版本中看到警告。