J'ai des données binaires que je veux enregistrer sous forme d'image. Lorsque j'essaie d'enregistrer l'image, cela lève une exception si le flux de mémoire utilisé pour créer l'image a été fermé avant l'enregistrement. La raison pour laquelle je fais cela est parce que je crée dynamiquement des images et en tant que tel .. j'ai besoin d'utiliser un flux de mémoire.
c'est le code:
[TestMethod]
public void TestMethod1()
{
// Grab the binary data.
byte[] data = File.ReadAllBytes("Chick.jpg");
// Read in the data but do not close, before using the stream.
Stream originalBinaryDataStream = new MemoryStream(data);
Bitmap image = new Bitmap(originalBinaryDataStream);
image.Save(@"c:\test.jpg");
originalBinaryDataStream.Dispose();
// Now lets use a nice dispose, etc...
Bitmap2 image2;
using (Stream originalBinaryDataStream2 = new MemoryStream(data))
{
image2 = new Bitmap(originalBinaryDataStream2);
}
image2.Save(@"C:\temp\pewpew.jpg"); // This throws the GDI+ exception.
}
Quelqu'un a-t-il des suggestions sur la façon dont je pourrais enregistrer une image avec le flux fermé? Je ne peux pas compter sur les développeurs pour se souvenir de fermer le flux une fois l'image enregistrée. En fait, le développeur n'aurait AUCUNE IDÉE que l'image a été générée en utilisant un flux mémoire (car cela se produit dans un autre code, ailleurs).
Je suis vraiment confus :(
using
block. Je pense que le a originalBinaryDataStream2
été automatiquement supprimé à la fin de l'utilisation. Et cela jetterait l'exception.