Sovrascrivere un file di immagine (bitmap)
Domanda
Ciao, sto cercando di salvare un'immagine bitmap in un programma di base per l'editor di immagini.
Ecco il codice:
// then save it
ImageBoxInApp.Image.Save(filename);
[EDIT] E sto aprendo l'immagine con questo
openFileDialog1.Title = "Select an Image";
openFileDialog1.Filter = "All Files|*.*|Windows Bitmaps|*.bmp|JPEG Files|*.jpg";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
filename = openFileDialog1.FileName;
Image img = System.Drawing.Image.FromFile(filename);
Quindi, quando provo questo, ricevo un errore GDI + generico
. Quindi ho trovato una soluzione e sembra così:
// Delete existing file first
System.IO.File.Delete(filename);
// then save it
ImageBoxInApp.Image.Save(filename);
Ma quando provo a fare questo ricevo un altro errore che dice che il file che sto eliminando è attualmente aperto. Questo perché è il file che sto cercando di modificare.
Come posso chiudere " il file senza effettivamente chiudere l'applicazione? O esiste una soluzione alternativa?
Grazie!
Soluzione
È difficile dirlo senza vedere un contesto su come caricare il file, ma ecco alcuni suggerimenti:
- Prima di salvare, copiare l'immagine esistente in una nuova immagine, chiudere l'originale, eseguire l'eliminazione e salvare la copia.
- Salva il file in un nome file casuale, elimina l'originale, rinomina il file con nome casuale con il nome originale.
- Carica il file in un flusso di memoria e usa la copia in memoria per inizializzare l'immagine.
Vado personalmente con l'opzione 3 per la maggior parte dei casi. Assicurati di eliminare l'immagine quando hai finito di usarla - è meglio se puoi avvolgerla in un blocco using ().