Чтение TIFF-файла с использованием libtiff в C ++: предотвратить распечатку предупреждения
При чтении файла TIFF я получаю предупреждающее сообщение на консоль каждый раз, когда неизвестный тег читается функцией TIFFReadDirectory (). Из ответа, предоставленного пользователем Боровского, я понял, что для предотвращения этого мне необходимо:
«Начните с создания класса, который наследуется от 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));
}
Может кто-нибудь помочь мне понять это? Что я делаю не так и где определяется этот класс?
Спасибо
Ответ, на который вы ссылаетесь, — для 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));
}
Обратите внимание, что вы также можете позвонить TIFFSetWarningHandler
с NULL
аргумент, но мне нравится использовать обработчик, который #ifdef
Вышел в сборках Release только для того, чтобы я все еще мог видеть предупреждения в сборках Debug.