
Erreg (Normal User)
Newbie
    
Messaggi: 19
Iscritto: 13/12/2012
|
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 :
Codice sorgente - presumibilmente VB.NET |
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
|
|

Renny (Normal User)
Expert
    
Messaggi: 231
Iscritto: 30/07/2011
|
Prova con
Codice sorgente - presumibilmente C# / VB.NET |
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..
|
|

Erreg (Normal User)
Newbie
    
Messaggi: 19
Iscritto: 13/12/2012
|
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
|
|

Renny (Normal User)
Expert
    
Messaggi: 231
Iscritto: 30/07/2011
|
|
|

Erreg (Normal User)
Newbie
    
Messaggi: 19
Iscritto: 13/12/2012
|
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ì :
Codice sorgente - presumibilmente VB.NET |
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 il 13/12/2012 alle 22:27 |
|

Renny (Normal User)
Expert
    
Messaggi: 231
Iscritto: 30/07/2011
|
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!
|
|

Erreg (Normal User)
Newbie
    
Messaggi: 19
Iscritto: 13/12/2012
|
uso Seven Ultimate 32 bit
Ciao Renny e grazie ancora .
Ultima modifica effettuata da Erreg il 13/12/2012 alle 22:25 |
|

Qwertj (Dev Team)
Guru
    
Messaggi: 678
Iscritto: 30/05/2011
|
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
|
|

Erreg (Normal User)
Newbie
    
Messaggi: 19
Iscritto: 13/12/2012
|
Ciao Qwertj
credo di non essermi spiegato bene , per quanto riguarda le operazioni sui files in c: è vero quello che dici , è un problema di protezione, invece per il metodo che ho usato è l'unico che mi funziona , tieni presente che devo visualizzare due immagini contemporaneamente ( su 2 picturebox ) due immagini che provengono da due cartelle diverse e mentre le visualizzo devo salvarle con il percorso invertito ( non mi basta rinominarle ) , se non uso il .dispose non riesco ad accedere ai files.
complimenti per il sito gli darò un'okkio con calma ( a parte la musica che hai messo in Pole position i Eluveitie ) cosa ne pensi dei Tool e A Perfect Circle ?
|
|