这是.NET 4.0中的C#Winforms应用程序。如何在将字节数组转换为图像时处理错误?
我从一个应该是JPG图像的Web服务器接收一个字节数组。我这个数组转换为图像如下:
// byte[] ImageData ...
bool ValidImage = false;
try
{
MemoryStream ms = new MemoryStream(ImageData);
Bitmap FinalImage = new Bitmap(ms);
ValidImage = true;
}
catch (ArgumentException)
{
ImageStatus = "Invalid";
}
if (ValidImage) // do stuff...
很多时候接收到的数据是不是某种类型的图像,但垃圾。我真的更喜欢某种TryParse
的方法,因为我明白通过使用异常捕获来处理逻辑并不理想。
我该如何改进这种方法来干净地确定字节数组是否可以转换为图像而不依赖于异常?
编辑:
基于的Mikael的回答,我现在检查一个基本的“健康检查”的前两个字节试图将图像转换之前。仍然可能有无效的数据流,但由于我通常会接收文本而不是图像,因此标头检查将大大降低异常的频率。
// byte[] ImageData ...
bool ValidImage = false;
try
{
if (ImageData[0] == 0xFF && ImageData[1] == 0xD8)
{
MemoryStream ms = new MemoryStream(ImageData);
Bitmap FinalImage = new Bitmap(ms);
ValidImage = true;
}
}
catch (ArgumentException)
{
ImageStatus = "Invalid";
}
if (ValidImage) // do stuff...
这非常有用。它会通过做一些初步的完整性检查来减少异常发生的次数(如果不是总是如此)。感谢您的建议! – JYelton 2010-09-16 18:03:18