"Paramètre non valide" système de chargement d'exception.Dessin.Image

pourquoi j'obtiens l'exception "paramètre non valide" dans mon code:

MemoryStream ms = new MemoryStream(byteArrayIn);
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);

La longueur de byteArrayIn est 169014. Je reçois cette exception malgré le fait qu'aucune valeur en elle est supérieure à 255.

30
demandé sur rene 2009-03-10 15:40:46

9 réponses

j'ai eu le même problème et apparemment est résolu maintenant, malgré cela et quelques autres exceptions gdi+ sont très trompeuses, j'ai trouvé que le problème était en fait que le paramètre envoyé à un constructeur Bitmap n'était pas valide. J'ai ce code:

using (System.IO.FileStream fs = new System.IO.FileStream(inputImage, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite))
{
    try
    {
        using (Bitmap bitmap = (Bitmap)Image.FromStream(fs, true, false))
        {
            try
            {
                bitmap.Save(OutputImage + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                GC.Collect();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
    catch (ArgumentException aex)
    {
        throw new Exception("The file received from the Map Server is not a valid jpeg image", aex);
    }
}

La ligne suivante a été l'origine d'une erreur:

Bitmap bitmap = (Bitmap)Image.FromStream(fs, true, false)

le flux de fichiers a été construit à partir du fichier téléchargé à partir du serveur Map. Mon application envoyait la demande incorrectement pour obtenir l'image, et le serveur était retourner quelque chose avec l'extension jpg, mais était en fait un html me disant qu'une erreur s'est produite. Donc je prenais cette image et j'essayais de construire un Bitmap avec. Le correctif était de contrôler / valider l'image pour une image jpeg valide.

j'Espère que ça aide!

18
répondu Sebastian 2013-07-04 11:40:18

a mon avis, c'est byteArrayIn ne contient pas de données image valides.

pouvez-vous donner plus d'informations si:

  • quelle ligne de code lance une exception?
  • Quel est le message?
  • Où avez-vous byteArrayIn à partir de, et vous êtes sûr qu'il doit contenir une image valide?
14
répondu Jon Skeet 2009-03-10 12:48:18
byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}
ImageConverter imageConverter = new System.Drawing.ImageConverter();
System.Drawing.Image image = imageConverter.ConvertFrom(fileData) as System.Drawing.Image;
image.Save(imageFullPath, System.Drawing.Imaging.ImageFormat.Jpeg);
4
répondu Savas Adar 2014-01-14 20:48:13

quelle ligne lance l'exception? new MemoryStream(...)? ou Image.FromStream(...)? Et qu'est-ce que le byteArrayIn? Est-il un