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

本文关键字:显示 警告 消息 控制台 何使用 LibTiff | 更新日期: 2023-09-27 18:18:27

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

我使用检测损坏图像的应用程序得到以下警告。应用程序按预期工作,但出现了这些消息。

ReadDirectory: Warning, C:'find corrupt images' a.f f: unknown field与标签50701 (0xc60d)遇到fillStrip: C:'查找损坏images' b.t f:扫描时读取错误;预期得到7115字节10130读取目录:警告,C:'查找损坏的图像' C:未知标签为33885 (0x845d)的字段遇到ReadDirectory:警告,C:'查找损坏的图像'd:标记为50701的未知字段(0xc60d)ReadDirectory: Warning, C:'find corruptionimages 'e:

LibJpeg:警告,损坏的JPEG数据:之前有11021个多余字节标记0xD8 LibJpeg: Unexpected error

OJPEGSetupDecode:警告,贬值和麻烦的老式JPEG压缩模式,请转换为新样式的JPEG压缩通知供应商编写软件ojpegreadheaderinfosecstreamsofs:

ReadDirectory: Warning, SamplesPerPixel标签缺失,假设正确的采样像素值为1

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

有办法阻止这些消息出现吗?

Thanks in advance

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

您需要用正确的签名覆盖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

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

首先创建一个继承了TiffErrorHandler并重载WarningHandlerWarningHandlerEx方法的类。基本上,在这些方法中你什么也做不了。

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