Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] caricare 2 immagini e salvarle invertite
Forum - C# / VB.NET - [VB.NET] caricare 2 immagini e salvarle invertite

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Erreg (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 17:04
Giovedì, 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

  1. Public Class Form1
  2.     Dim soleOrig ,lunaOrigAs Bitmap
  3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.         PictureBox1.Image = Image.FromFile("c:\sole.jpg")
  5.         PictureBox2.Image = Image.FromFile("c:\luna.jpg")
  6. End Sub
  7.  
  8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
  9.         soleOrig = PictureBox1.Image
  10.         lunaOrig = PictureBox2.Image
  11.  
  12.        
  13.         cancella()
  14.         'vado a salvare l'immagine Sole nel percorso dell'immagine Luna
  15.         soleOrig.Save("c:\luna.jpg")
  16.         ' salvo l'immagine Luna nel percorso dell'immagine sole
  17.         lunaOrig.Save("c:\sole.jpg")
  18. End Sub
  19.    
  20. Private Sub cancella()
  21.         PictureBox1.Image.Dispose()
  22.         PictureBox2.Image.Dispose()
  23.     End Sub
  24. 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

PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 18:20
Giovedì, 13/12/2012
Prova con
Codice sorgente - presumibilmente C# / VB.NET

  1. 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..

PM Quote
Avatar
Erreg (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 18:34
Giovedì, 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

PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 20:58
Giovedì, 13/12/2012
Hai provato impostando l'image = nothing?
http://social.msdn.microsoft.com/forums/en-US/vblanguage/t ...

PM Quote
Avatar
Erreg (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 22:12
Giovedì, 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

  1. Public Class Form1
  2.     Dim foto1, foto2 As Bitmap
  3.  
  4.  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  5.        'creo un oggetto image  e gli assegno la prima immagine  
  6.        Dim Fototemp As Image = New Bitmap("f:\sole.jpg")
  7.        ' duplico l'oggetto
  8.         foto1 = New Bitmap(Fototemp)
  9.        ' distruggo i riferimenti del primo oggetto all' immagine
  10.         Fototemp.Dispose()
  11.        ' ripeto i passaggi di prima per la seconda immagine
  12.         Fototemp = New Bitmap("f:\luna.jpg")
  13.         foto2 = New Bitmap(Fototemp)
  14.         Fototemp.Dispose()
  15.         ' a questo punto le due immagini sul programma sono svincolate dai files  e posso fare quelloche voglio
  16.         ' visualizzarle nei picturebox
  17.         PictureBox1.Image = foto1
  18.         PictureBox2.Image = foto2
  19.         ' salvarle invertite ( cioè l'immagine 1 nel percorso della 2 e viceversa
  20.         PictureBox1.Image.Save("f:\luna.jpg")
  21.         PictureBox2.Image.Save("f:\sole.jpg")
  22.     End Sub
  23. 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
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 22:18
Giovedì, 13/12/2012
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:

PM Quote
Avatar
Erreg (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 22:24
Giovedì, 13/12/2012
uso Seven Ultimate 32 bit
Ciao Renny e grazie ancora .
:asd:

Ultima modifica effettuata da Erreg il 13/12/2012 alle 22:25
PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 15:33
Venerdì, 14/12/2012
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

PM Quote
Avatar
Erreg (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 16:15
Venerdì, 14/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 ?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo