Ceci est une application C# Winforms dans .NET 4.0.Comment gérer les erreurs lors de la conversion d'un tableau d'octets en image?
Je reçois un tableau d'octets d'un serveur Web qui est supposé être une image JPG. Je convertir ce tableau à une image comme suit:
// 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...
Très souvent, les données reçues n'est pas une image, mais les déchets de quelque sorte. Je préférerais vraiment une sorte d'approche TryParse
, car je comprends la manipulation de la logique en utilisant l'attraper des exceptions pour être moins que souhaitable.
Comment est-ce que je peux améliorer cette méthode pour déterminer proprement si un tableau d'octets peut être converti en image sans compter sur une exception?
EDIT:
Sur la base de la réponse de Mikael, je vérifie maintenant les deux premiers octets pour un « contrôle de santé d'esprit » rudimentaire avant d'essayer de convertir l'image. Il est toujours possible d'avoir un flux de données invalide, mais comme je reçois habituellement du texte à la place d'une image, la vérification de l'en-tête réduira considérablement la fréquence de l'exception.
// 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...
Ceci est extrêmement utile. Il permettra de réduire le nombre de fois que l'exception se produit (si ce n'est pas toujours) en faisant un peu de vérification de santé mentale préliminaire. Merci pour la suggestion! – JYelton