Conversion d'une image JPEG en tableau d'octets - exception COM
À l'aide de C#, je suis en train de charger un fichier JPEG à partir d'un disque et de le convertir en un tableau d'octets. Jusqu'à présent, j'ai ce code:
static void Main(string[] args)
{
System.Windows.Media.Imaging.BitmapFrame bitmapFrame;
using (var fs = new System.IO.FileStream(@"C:\Lenna.jpg", FileMode.Open))
{
bitmapFrame = BitmapFrame.Create(fs);
}
System.Windows.Media.Imaging.BitmapEncoder encoder =
new System.Windows.Media.Imaging.JpegBitmapEncoder();
encoder.Frames.Add(bitmapFrame);
byte[] myBytes;
using (var memoryStream = new System.IO.MemoryStream())
{
encoder.Save(memoryStream); //Line ARGH
//mission accomplished if myBytes is populated
myBytes = memoryStream.ToArray();
}
}
Toutefois, l'exécution de la ligne de ARGH
me donne le message:
COMException était non gérée. Le handle n'est pas valide. (Exception de
HRESULT: 0x80070006 (E_HANDLE))
Je ne pense pas qu'il y est quelque chose de spécial sur le fichier Lenna.jpg
- je l'ai téléchargé à partir de http://computervision.wikia.com/wiki/File:Lenna.jpg. Pouvez-vous dire quel est le problème avec le code ci-dessus?
source d'informationauteur user181813 | 2011-09-14
Vous devez vous connecter pour publier un commentaire.
Vérifier les exemples de cet article: http://www.codeproject.com/KB/recipes/ImageConverter.aspx
Aussi il est préférable d'utiliser des classes de
System.Drawing
Autre suggestion:
Devrait être de travailler non seulement avec des images.
La raison de cette erreur qui arrive, c'est parce que le BitmapFrame.Méthode Create() vous utilisez les valeurs par défaut à une Demande de la charge. Le BitmapFrame n'essayez pas de lire le flux est associé à jusqu'à ce que l'appel à l'encodeur.Enregistrer, par laquelle le flux est déjà éliminés.
Vous pouvez soit renvoyer l'ensemble de la fonction à l'aide de {} bloc, ou utilisez un autre BitmapFrame.Créer(), tels que: