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

C# 如何使用LibTiff c禁用控制台上显示的警告消息#,c#,libtiff,libtiff.net,C#,Libtiff,Libtiff.net,我需要帮助来停止在我的控制台上显示恼人的警告 我使用检测损坏图像的应用程序收到以下警告。应用程序按预期工作,但会显示这些消息 ReadDirectory:警告,C:\find corrupted images\a.TIF:未知字段 使用标记50701(0xc60d)时遇到fillStrip:C:\find corrupted images\b.TIF:scanlin e-1处的读取错误;应为7115字节 10130 ReadDirectory:警告,C:\find corrupted image

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

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

ReadDirectory:警告,C:\find corrupted images\a.TIF:未知字段 使用标记50701(0xc60d)时遇到fillStrip:C:\find corrupted images\b.TIF:scanlin e-1处的读取错误;应为7115字节 10130 ReadDirectory:警告,C:\find corrupted image\C:未知 遇到带有标记33885(0x845d)的字段ReadDirectory:警告, C:\find corrupted images\d:带有标记50701(0xc60d)的未知字段 遇到ReadDirectory:警告,C:\find corrupted image\e:

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

OJPEGSetupDecode:警告、贬值和麻烦的旧式JPEG 压缩模式,请转换为新型JPEG压缩和 通知供应商写入软件OJPEGREADERINFOSECSTREAMSOF:

ReadDirectory:警告,缺少SamplesPerPixel标记,假设 正确的每像素采样数值为1

tif:遇到标签为50701(0xc60d)的未知字段ReadDirectory: 警告,假设采样正确,则缺少SamplesPerPixel标记 每像素值为1

有没有办法阻止这些消息出现


提前感谢

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

首先创建继承并重载
WarningHandler
warninghandlex
方法的类。基本上,用这些方法你什么都做不了


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

您需要使用正确的签名覆盖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"))
    { .....
请注意,我们只覆盖了警告处理程序。当然,您也可以重写错误处理程序。参考:


复制这样详细的错误消息?不需要也没有用。感谢您的建议,我创建了一个类似于下面的公共类MyErrorHandler:TiffErrorHandler{public void WarningHandler(){}public void warninghandlex(){}的类,然后我在主函数MyErrorHandler ErrorHand=new MyErrorHandler()中创建了它的一个实例;然后我尝试使用SetErrorHandler,但intellisense似乎找不到该函数我做错了什么吗?提前谢谢@user2469935
SetErrorHandler
Tiff
类的静态方法。您应该像
Tiff.SetErrorHandler(..)
那样编写它。