Чтение TIFF-файла с использованием libtiff в C ++: предотвратить распечатку предупреждения

Чтение 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));
}

Может кто-нибудь помочь мне понять это? Что я делаю не так и где определяется этот класс?

Спасибо

3

Решение

Ответ, на который вы ссылаетесь, — для 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.

2

Другие решения


По вопросам рекламы [email protected]