我无法在C#应用程序中加载Tiff文件。当tiff文件上传到应用程序时,它会被挂断。 发生这种情况是因为该tiff文件已损坏。
请推荐一种解决方案,以识别此损坏的tiff文件,以使应用程序在上载时不会崩溃或挂断。
下面是代码片段,当在bmp对象中打开文件时,应用程序挂在该行代码上。
public void ReadTiff(byte[] fileData)
{
try
{
using (var ms = new MemoryStream(fileData))
{
using (var bmp = new Bitmap(ms))
{
// Some code
}
}
}
catch (Exception ex)
{
throw ex;
}
}
我尝试了以下文件:
答案 0 :(得分:0)
如果图像返回ImageFormat.unknown,它已损坏并且不是有效的图像,请使用下面的函数获取图像类型
public static ImageFormat GetImageFormat(byte[] bytes)
{
var bmp = Encoding.ASCII.GetBytes("BM"); // BMP
var gif = Encoding.ASCII.GetBytes("GIF"); // GIF
var png = new byte[] { 137, 80, 78, 71 }; // PNG
var tiff = new byte[] { 73, 73, 42 }; // TIFF
var tiff2 = new byte[] { 77, 77, 42 }; // TIFF
var jpeg = new byte[] { 255, 216, 255, 224 }; // jpeg
var jpeg2 = new byte[] { 255, 216, 255, 225 }; // jpeg canon
if (bmp.SequenceEqual(bytes.Take(bmp.Length)))
return ImageFormat.bmp;
if (gif.SequenceEqual(bytes.Take(gif.Length)))
return ImageFormat.gif;
if (png.SequenceEqual(bytes.Take(png.Length)))
return ImageFormat.png;
if (tiff.SequenceEqual(bytes.Take(tiff.Length)))
return ImageFormat.tiff;
if (tiff2.SequenceEqual(bytes.Take(tiff2.Length)))
return ImageFormat.tiff;
if (jpeg.SequenceEqual(bytes.Take(jpeg.Length)))
return ImageFormat.jpeg;
if (jpeg2.SequenceEqual(bytes.Take(jpeg2.Length)))
return ImageFormat.jpeg;
return ImageFormat.unknown;
}
public enum ImageFormat
{
bmp,
jpeg,
gif,
tiff,
png,
unknown
}