Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    20

    [VB.NET] caricare 2 immagini e salvarle invertite

    ciao a tutti ! l'argomento è già stato 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:
    Public Class Form1
        Dim soleOrig As Bitmap
        Dim lunaOrig As 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
        End Sub
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            ' vado a invertire le immagini
            cancella()
            soleOrig.Save("c:\luna.jpg")
            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 perdano l'immagine.
    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 risolvere il problema ?
    Grazie anticipatamente , chiaramente vi lascio pagato il caffè al bar

  2. #2
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Vado ad intuito...sposta 'cancella' alla fine della sub e invece di dispose imposta nothing.
    Posso chiederti ha che ti serve?

    PS: dal titolo sembra che vuoi salvare l' immagine invertita graficamente...

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    20
    intanto Vinsent grazie della risposta ,
    ho provato come mi hai suggerito , ho sostituito immagine.dispose con immagine=nothing ma l'errore rimane " Errore generico in GDI+. " sia che la chiamata a cancella() venga spostata o meno , in pratica mi sembra di poter dire con una certa sicurezza che non riesco a chiudere il file caricato in precedenza prima di poterlo sovrascrivere .
    forse il titolo trae in inganno , il programma va a cercare tutte le immagini che sono all'interno di una cartella specifica le mette in una datagridview dopo di che devo poter scegliere se sostituirne alcune con altre immagini di un diverso archivio e salvarle nel solito percorso e con il solito nome di quando le ho caricate nella datagrid

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    20
    finalmente !!! ( dopo una settimana di ricerche ) sono riuscito .
    ho fatto in questa maniera:
    codice:
    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 ?

  5. #5
    Ottimo Gerets, grazie per aver condiviso questa soluzione. Ho imparato una cosa nuova che potrebbe servirmi in futuro!

    :-)

    Ciao

  6. #6
    Originariamente inviato da Gerets
    ..mettendo le immagini in un'altra partizione va che è una meraviglia, tu cosa ne pensi ? sarà per via dei privilegi dei vari utenti ?
    Se il sistema operativo è Windows Vista o superiori (Seven, 8) la ragione sta nel fatto che - per motivi di sicurezza - l'accesso a determinate cartelle (dalla semplice lettura alla modifica) è vietato dal sistema operativo stesso prescindendo dal livello di privilegi di cui dispone l'utente; anche eseguendo il programma come Administrator o settando i privilegi del programma al massimo livello in fase di progettazione, l'accesso a specifiche cartelle comporta il sollevamento di un eccezione, appartenente alla famiglia delle SecurityException.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.