PDA

View Full Version : [C#] Salvare immagine -> Errore generico GDI+


Diego_Armando
05-03-2009, 08:34
Ciao a tutti..

Sto impazzendo..

Ho un'oggetto di tipo Image. Vorrei salvare l'immagine sul disco fisso. Apparentemente sembra un'operazione banale.

Per farlo uso il metodo Save della classe Image.

Image.Save(@"C:\img.jpg");

Il metodo va però in errore e restituisce il seguente messaggio:

"Errore generico GDI+"

Uso Windows Vista.

Qualcuno mi può aiutare?

:confused:

gugoXX
05-03-2009, 11:24
Ciao a tutti..

Sto impazzendo..

Ho un'oggetto di tipo Image. Vorrei salvare l'immagine sul disco fisso. Apparentemente sembra un'operazione banale.

Per farlo uso il metodo Save della classe Image.

Image.Save(@"C:\img.jpg");

Il metodo va però in errore e restituisce il seguente messaggio:

"Errore generico GDI+"

Uso Windows Vista.

Qualcuno mi può aiutare?

:confused:

Diritti di scrittura?
Comunque metti un try-catch attorno, e leggi il messaggio d'errore esteso e le innerexception con il debugger, magari trovi qualcosa in piu'.

MarcoGG
05-03-2009, 12:45
Image.Save(@"C:\img.jpg");

Il metodo va però in errore e restituisce il seguente messaggio:

"Errore generico GDI+"

Uso Windows Vista.


E' lo stesso errore sollevato quando si apre un'immagine in una PictureBox con il metodo "diretto", e si cerca di salvarla nello stesso modo.
Molto comodo all'apparenza, ma poi ti tradisce... :D
Il fatto è che l'applicazione blocca l'immagine caricata da disco, ed ogni tentativo di sovrascriverla/modificarla o eliminarla produce un errore di risorsa condivisa con altro processo, o anche questo "Errore Generico GDI+".

Mi è capitato di recente con la PictureBox. Ho risolto così :

//Caricamento indiretto :
System.IO.FileStream FS;
FS = new System.IO.FileStream(percorso + "test.bmp", System.IO.FileMode.Open, System.IO.FileAccess.Read);
pcb_immagine.Image = Image.FromStream(FS);
FS.Close();

//Salvataggio :
Bitmap nuovaBmp = new Bitmap(pcb_immagine.Image);
nuovaBmp.Save(percorso + "test.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
nuovaBmp.Dispose();

Penso che con Image sia lo stesso identico discorso... ;)

Diego_Armando
05-03-2009, 13:03
E' lo stesso errore sollevato quando si apre un'immagine in una PictureBox con il metodo "diretto", e si cerca di salvarla nello stesso modo.
Molto comodo all'apparenza, ma poi ti tradisce... :D
Il fatto è che l'applicazione blocca l'immagine caricata da disco, ed ogni tentativo di sovrascriverla/modificarla o eliminarla produce un errore di risorsa condivisa con altro processo, o anche questo "Errore Generico GDI+".

Mi è capitato di recente con la PictureBox. Ho risolto così :

//Caricamento indiretto :
System.IO.FileStream FS;
FS = new System.IO.FileStream(percorso + "test.bmp", System.IO.FileMode.Open, System.IO.FileAccess.Read);
pcb_immagine.Image = Image.FromStream(FS);
FS.Close();

//Salvataggio :
Bitmap nuovaBmp = new Bitmap(pcb_immagine.Image);
nuovaBmp.Save(percorso + "test.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
nuovaBmp.Dispose();

Penso che con Image sia lo stesso identico discorso... ;)

Il problema è che l'immagine non la carico dal disco ma proviene dal Web quindi non ci sono problemi di lock sull'immagine.

Non so dove sbattere la testa...AIUTO!!!!

MarcoGG
05-03-2009, 15:53
Evidentemente cerchi di salvare l'immagine prima ancora che il processo di download sia terminato, da qui l'errore GDI+.

Beh, ma la soluzione l'avevi già !

Ti avevo già postato qui :
http://www.hwupgrade.it/forum/showthread.php?t=1938366

un codice che funziona non solo per le immagini, ma per qualsiasi file.