Questo titolo potrà risultare un po' strano (in effetti non sapevo come intitolare questo post) però vi spiegherò subito il problema nel quale mi sono imbattuto.
Avevo la necessità di caricare un'immagine da un file, generare la versione ridotta (più piccola nelle dimensioni) e salvarla. Il codice che utilizzavo era il seguente:
Dim fsImgGrande As FileStream = New FileStream(nuovoFileName, FileMode.Open, FileAccess.Read)
oImage = Image.FromStream(fsImgGrande)
fsImgGrande.Close()
oThumb = oImage.GetThumbnailImage(larghezza, altezza, Nothing, Nothing)
A questo punto ottenevo un bel: System.OutOfMemoryException :(
Chiudendo alla fine il FileStream, l'errore non si verifica:
Dim fsImgGrande As FileStream = New FileStream(nuovoFileName, FileMode.Open, FileAccess.Read)
oImage = Image.FromStream(fsImgGrande)
oThumb = oImage.GetThumbnailImage(larghezza, altezza, Nothing, Nothing)
fsImgGrande.Close()
Mi chiedo: una volta che l'immagine è stata caricata sull'oggetto oImage, che se ne fa la funzione GetThumbnailImage di avere ancora il FileStream aperto? Eppure se chiudo lo Stream e poi assegno l'oggetto oImage ad un controllo immagine, la foto viene visualizzata lo stesso. Sembra quasi che la funzione GetThumbnailImage vada a lavorare direttamente sul file originale e non sull'immagine caricata in memoria.