Oppure

Loading
13/12/12 16:04
Erreg
ciao a tutti ! l'argomento è già stato sicuramente trattato ma io ho aperto questa nuova discussione perchè proprio non ne vengo a capo .
allora carico 2 immagini in 2 picturebox e cerco di salvarle con i percorsi invertiti ( cioè l'imm. 1 la vorrei sotituire all'imm.2 e l'imm.2 all'imm.1)
questa parte di codice è un esempio di come ho provato :

Public Class Form1
    Dim soleOrig ,lunaOrigAs Bitmap
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PictureBox1.Image = Image.FromFile("c:\sole.jpg")
        PictureBox2.Image = Image.FromFile("c:\luna.jpg")
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        soleOrig = PictureBox1.Image
        lunaOrig = PictureBox2.Image

       
        cancella()
        'vado a salvare l'immagine Sole nel percorso dell'immagine Luna
        soleOrig.Save("c:\luna.jpg")
        ' salvo l'immagine Luna nel percorso dell'immagine sole
        lunaOrig.Save("c:\sole.jpg")
End Sub
    
Private Sub cancella()
        PictureBox1.Image.Dispose()
        PictureBox2.Image.Dispose()
    End Sub
End Class

in questo modo il programma si interrompe al salvataggio dei files con il messaggio " parametro non valido" mi sembra di capire che usando il .dispose sui picturebox anche gli oggetti soleorig e lunaorig vengano svuotati.
invece se non uso il .dispose l'errore è "Errore generico in GDI+." e quì mi sembra di capire che i files sono ancora in uso nei picturebox e non posso modificarli .
Qualche anima gentile mi darebbe qualche dritta per indirizzarmi nella maniera corretta ?
Grazie anticipatamente
aaa
13/12/12 17:20
Renny
Prova con
 PictureBox1.Image = Nothing

Rispetto al fatto che i file sono ancora in uso.. Bisognerebbe fare delle prove.. Ma non è più semplice rinominare i file stessi?
Chiamare Sole.jpg -> temp.jpg. Dopo di che rinomini luna.jpg in sole.jpg e temp.jpg in luna.jpg..
aaa
13/12/12 17:34
Erreg
ciao , grazie per il tuo intervento,
allora , per quanto riguarda il rinominare i files il tuo metodo va sicuramente bene ma io ho bisogno di salvarli invertiti e qui entrano in gioco i files ancora in uso , ho già provato in diversi modi ma non riesco a svincolare le immagini originali da quelle caricate nel programma , sia che siano in picturebox o in oggetti image o bitmap , probabilmente è una combinazione di assegnazione a oggetti e all'uso di .dispose() ma non riesco a trovare il modo corretto
aaa
13/12/12 19:58
Renny
Hai provato impostando l'image = nothing?
social.msdn.microsoft.com/forums/en-US/vblanguage/thread/…
aaa
13/12/12 21:12
Erreg
grazie ancora per l'intervento , si ho provato anche con image = nothing ma non funziona .
però frugando su internet ho capito e ho risolto così :
Public Class Form1
    Dim foto1, foto2 As Bitmap

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       'creo un oggetto image  e gli assegno la prima immagine   
       Dim Fototemp As Image = New Bitmap("f:\sole.jpg")
       ' duplico l'oggetto
        foto1 = New Bitmap(Fototemp)
       ' distruggo i riferimenti del primo oggetto all' immagine
        Fototemp.Dispose()
       ' ripeto i passaggi di prima per la seconda immagine
        Fototemp = New Bitmap("f:\luna.jpg")
        foto2 = New Bitmap(Fototemp)
        Fototemp.Dispose()
        ' a questo punto le due immagini sul programma sono svincolate dai files  e posso fare quelloche voglio 
        ' visualizzarle nei picturebox
        PictureBox1.Image = foto1
        PictureBox2.Image = foto2
        ' salvarle invertite ( cioè l'immagine 1 nel percorso della 2 e viceversa 
        PictureBox1.Image.Save("f:\luna.jpg")
        PictureBox2.Image.Save("f:\sole.jpg")
    End Sub
End Class

per correttezza devo dire che lasciando le immagini in c:\ mi dava sempre un Errore generico . invece mettendo le immagini in un'altra partizione va che è una meraviglia, tu cosa ne pensi ? sarà per via dei privilegi dei vari utenti ?
Ultima modifica effettuata da Erreg 13/12/12 21:27
aaa
13/12/12 21:18
Renny
Non saprei.. Che sistema operativo usi? In ogni caso se ci sono problemi di privilegi, il compilatore dovrebbe restituirti un messaggio specifico e non "errore generico". Se magari qualcuno che ne sa di più interviene e chiarisce... Comunque l'importante è che hai risolto.
Ciao!:k:
aaa
13/12/12 21:24
Erreg
uso Seven Ultimate 32 bit
Ciao Renny e grazie ancora .
:asd:
Ultima modifica effettuata da Erreg 13/12/12 21:25
aaa
14/12/12 14:33
Qwertj
A Save() non frega niente se le immagini sono in uso o no
E se fai il Dispose() di un oggetto non riesci a lavorare su riferimenti dei suoi membri

Il problema è appunto di protezione della cartella C:\

E in ogni caso ha ragione Renny a dirti che era più furbo rinominarli, così sprechi molte risorse per nulla
Poi se lavori sulle immagini è un altro discorso, ma da quello che hai postato sembra inutilmente laborioso
aaa