7
votes

Création et sauvegarde d'une image à partir d'un parmi les causes d'octet [] Le paramètre n'est pas une exception valide

J'ai mis en place la fonctionnalité suivante qui se connecte à WebService et télécharge un Favicon à partir d'un site donné et l'enregistre à un octet [] que je stocke dans notre base de données. Je veux maintenant le configurer pour que cela enregistre l'icône sur le disque. Cependant, je reçois un "paramètre n'est pas valide" lorsque j'essaie de créer l'image à partir de l'octet [].

Mon code est comme suit .. p>

stream.Write(imageByteArray, 0, imageByteArray.Length);
Image i = Image.FromStream(stream); // EXCEPTION HAPPENS HERE.
i.Save(@"C:\tmp\" + filename + ".ico");


2 commentaires

Comment collectez-vous ces fichiers Favicon ? Êtes-vous sûr que le fichier existe toujours? Recherchez-vous imagebytearray.length == 0 ?


Oui, je suis sûr que le tableau n'est pas zéro et quand je sauvegarde cette icône sur la DB, cela fonctionne bien.


3 Réponses :


0
votes

Ajouter un format d'image:

stream.Position = 0;
i.Save(@"C:\tmp\" + filename + ".ico", System.Drawing.Imaging.ImageFormat.Icon);


2 commentaires

L'exception jette la ligne avant cela, de la ligne image.fromstream (flux); Il semble que la valeur dans la matrice d'octet qui souffle contient 127


Désolé avez déjà essayé cela aussi et cela ne fait aucune différence. Encore une fois, cela semble ne se produire que pour certains sites. Merci pour l'aide!



21
votes

Il n'est pas nécessaire de le mettre dans une image, il suffit de cracher les octets tout de suite: xxx


2 commentaires

Parfait, je passais vraiment trop de temps à penser dans la boîte.


Il est préférable d'utiliser à l'aide de la relève plutôt que d'ouvrir et de fermer le courant manuellement.



1
votes

Je savais que vous avez eu la réponse dont vous avez besoin, mais je veux juste aller sur votre idée d'origine. Je pense que le problème est que votre array d'octet avait été modifié et devenez Byte Chary Array, il vous suffit d'ajouter ce code pour que cela devienne devenue une matrice d'octet:

for (int i=0;i<imageByteArray.Length;i++)
{
    imageByteArray[i]=(byte) imageByteArray[i];
}


0 commentaires