如何使用LibTiff c#禁用控制台上显示的警告消息#

时间:2013-06-14 07:50:00

标签: c# libtiff libtiff.net

我需要帮助来阻止我控制台上显示的恼人警告。

我使用检测到损坏图像的应用程序收到以下警告。应用程序按预期工作,但会显示这些消息。

  

ReadDirectory:警告,C:\查找损坏的图像\ a.TIF:未知字段   标签50701(0xc60d)遇到fillStrip:C:\ find corrupted   images \ b.TIF:在scanlin e -1读取错误;得到7115字节,预计   10130 ReadDirectory:警告,C:\查找损坏的图像\ c:未知   字段机智h标签33885(0x845d)遇到ReadDirectory:警告,   C:\查找损坏的图像\ d:未知字段,标记为50701(0xc60d)   遇到ReadDirectory:警告,C:\查找损坏的图像\ e:

     

LibJpeg:警告,损坏的JPEG数据:之前的11021个无关字节   标记0xD8 LibJpeg:意外错误

     

OJPEGSetupDecode:警告,折旧和麻烦的旧式JPEG   压缩模式,请转换为新式JPEG压缩和   通知供应商写作软件OJPEGReadHeaderInfoSecStreamSof:

     

ReadDirectory:警告,SamplesPerPixel标记丢失,假设   正确的样本PerPixel值为1

     

tif:标识为50701(0xc60d)的未知字段遇到ReadDirectory:   警告,SamplesPerPixel标记丢失,假设样本正确   PerPixel值为1

有关如何阻止这些消息出现的任何想法?

提前致谢

2 个答案:

答案 0 :(得分:2)

如果您不希望警告出现在控制台中,您应该为库提供自己的错误处理程序。

首先创建继承自TiffErrorHandler并重载WarningHandlerWarningHandlerEx方法的类。基本上,你不能在这些方法中做任何事情。

然后使用SetErrorHandler方法将您的类的实例设置为库的错误处理程序。该方法是静态的,您可以在打开图像之前设置错误处理程序。

答案 1 :(得分:0)

您需要使用正确的签名覆盖WarningHandler()和WarningHandlerExt()方法:

    public class DisableErrorHandler : TiffErrorHandler
    {
        public override void WarningHandler(Tiff tif, string method, string format, params object[] args)
        {
           // do nothing, ie, do not write warnings to console
        }
        public override void WarningHandlerExt(Tiff tif, object clientData, string method, string format, params object[] args) 
        {
           // do nothing ie, do not write warnings to console
        }
    }

通过具有正确的方法签名和方法名称,需要override关键字。成功重写方法后,将错误处理程序设置为新方法即可正常工作:

    Tiff.SetErrorHandler(new DisableErrorHandler());
    // now no warnings will be sent to console

    using (Tiff tiff = Tiff.Open(fn, "r"))
    { .....

注意,我们仅覆盖了警告处理程序。您当然也可以覆盖错误处理程序。参考:

https://bitmiracle.github.io/libtiff.net/help/api/BitMiracle.LibTiff.Classic.TiffErrorHandler.html