1

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

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

ReadDirectory: 警告, C:\find 损坏的图像\a.TIF: 遇到带有标签 50701 (0xc60d) 的未知字段 fillStrip: C:\find 损坏的图像\b.TIF: 在 scanlin e -1 处读取错误;得到 7115 字节,预期 10130 ReadDirectory: 警告,C:\find 损坏的图像\c: 带有标签 33885 (0x845d) 的未知字段遇到 ReadDirectory: 警告,C:\find 损坏的图像\d: 带有标签 50701 (0xc60d) 的未知字段) 遇到 ReadDirectory: 警告,C:\find 损坏的图像\e:

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

OJPEGSetupDecode:警告,已弃用且麻烦的旧式JPEG压缩模式,请转换为新式JPEG压缩并通知编写软件供应商OJPEGReadHeaderInfoSecStreamSof:

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

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

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

提前致谢

4

2 回答 2

2

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

首先创建从TiffErrorHandler和重载WarningHandlerWarningHandlerEx方法继承的类。基本上,您在这些方法中无能为力。

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

于 2013-06-14T10:53:24.317 回答
1

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

于 2020-01-17T21:11:33.263 回答