Это приложение C # Winforms в .NET 4.0.
Я получаю байтовый массив с веб-сервера, который должен быть изображением JPG. Я конвертирую этот массив в изображение следующим образом:
// 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
подход, так как я понимаю, что логика обработки с использованием перехвата исключений меньше желаемого.
Как я могу улучшить этот метод, чтобы точно определить, можно ли преобразовать байтовый массив в изображение, не полагаясь на исключение?
EDIT:
Основываясь на ответе Микаэля, я сейчас проверяю первые два байта на элементарную «проверку здравомыслия», прежде чем пытаться преобразовать изображение. Все еще возможно иметь неверный поток данных, но, поскольку я обычно получаю текст вместо изображения, проверка заголовка значительно уменьшит частоту исключения.
// 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...