我需要帮助来阻止我控制台上显示的恼人警告。
我使用检测到损坏图像的应用程序收到以下警告。应用程序按预期工作,但会显示这些消息。
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
有关如何阻止这些消息出现的任何想法?
提前致谢
答案 0 :(得分:2)
如果您不希望警告出现在控制台中,您应该为库提供自己的错误处理程序。
首先创建继承自TiffErrorHandler并重载WarningHandler
和WarningHandlerEx
方法的类。基本上,你不能在这些方法中做任何事情。
然后使用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