Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di x69asterix
    Registrato dal
    Jan 2005
    Messaggi
    1,303

    [VB.NET]GDI+ Salvare immagine

    come si risolve l'errore generico, praticamente quando apro un'immagine e la modifico con successo, poi la voglio salvare sempre sullo stesso percorso: mi viene restituito un'errore generico gdi+
    il salvataggio avviene così:
    codice:
    Try
                picDemoArea.Image.Save(Application.StartupPath + "\images\" & Label3.Text, System.Drawing.Imaging.ImageFormat.Jpeg)
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Errore", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End Try
    quando la carico invece:
    codice:
    If openfile.ShowDialog() = DialogResult.OK Then
                With picDemoArea
                    .Image = Image.FromFile(openfile.FileName)
                    .SizeMode = PictureBoxSizeMode.StretchImage
                End With
    se le due destinazioni e percorsi sono diversi allora il salvataggio va a buon fine caso contrario no!

    provo anche ad eliminare il file con io.file.delete, ma non viene elimanato in quanto il file è in esecuzione

  2. #2
    Forse l'errore è dato proprio dal tentativo di sovrascrittura del file in utilizzo. Prima della modifica all'immagine metti il file in una cartella temporanea e fai le modifiche su quel file. Dopodiché salvi e sovrascrivi il file originale.

  3. #3
    Utente di HTML.it L'avatar di x69asterix
    Registrato dal
    Jan 2005
    Messaggi
    1,303
    Originariamente inviato da mardok30
    Forse l'errore è dato proprio dal tentativo di sovrascrittura del file in utilizzo. Prima della modifica all'immagine metti il file in una cartella temporanea e fai le modifiche su quel file. Dopodiché salvi e sovrascrivi il file originale.
    ciao mardok30
    cosa intendi metti file in una cartella temporanea, eseguo una copia del file da manipolare, eseguo ... e poi lo vado ad sovrascrivere?

  4. #4
    Il problema nasce dal fatto che tu vuoi salvare un'immagine su un file che è ancora aperto dal programma che la sta modificando (il tuo), quindi devi trovare un modo per aprire l'immagine, farne una copia da qualche parte, modificare quella e sovrascrivere la prima.

    Anzichè creare un nuovo file salvati una copia dell'immagine (un altro oggetto Image), quindi chiudi il riferimento alla prima e modifichi la seconda che poi andrai a salvare sul percorso della prima. Se non ti è chiaro qualcosa fa sapere.

    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  5. #5
    Utente di HTML.it L'avatar di x69asterix
    Registrato dal
    Jan 2005
    Messaggi
    1,303
    Originariamente inviato da chipdb
    Il problema nasce dal fatto che tu vuoi salvare un'immagine su un file che è ancora aperto dal programma che la sta modificando (il tuo), quindi devi trovare un modo per aprire l'immagine, farne una copia da qualche parte, modificare quella e sovrascrivere la prima.

    Anzichè creare un nuovo file salvati una copia dell'immagine (un altro oggetto Image), quindi chiudi il riferimento alla prima e modifichi la seconda che poi andrai a salvare sul percorso della prima. Se non ti è chiaro qualcosa fa sapere.

    ciao, il problema lo hai centrato in pieno, io riesco a fare quanto descritto, ma quando voglio eliminare il file temporaneo questo non si cancecella perchè risulta ancora in uso. in rosso l'errore

    codice:
     Try
                picDemoArea.Image.Save(Application.StartupPath + "\images\" & Label3.Text, System.Drawing.Imaging.ImageFormat.Jpeg)
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Errore", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Finally
    
                My.Computer.FileSystem.DeleteDirectory(Application.StartupPath + "\temp", FileIO.DeleteDirectoryOption.DeleteAllContents)  
               My.Computer.FileSystem.CreateDirectory(Application.StartupPath + "\temp")
                My.Computer.FileSystem.DeleteDirectory(Application.StartupPath + "\convert", FileIO.DeleteDirectoryOption.DeleteAllContents)
                My.Computer.FileSystem.CreateDirectory(Application.StartupPath + "\convert")
    
            End Try

  6. #6
    Devi chiamare il metodo Dispose dell'immagine così lui chiude tutti gli handle e puoi cancellarla

    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  7. #7
    Utente di HTML.it L'avatar di x69asterix
    Registrato dal
    Jan 2005
    Messaggi
    1,303
    Originariamente inviato da chipdb
    Devi chiamare il metodo Dispose dell'immagine così lui chiude tutti gli handle e puoi cancellarla

    ma in questo caso come chiamo dispose?

  8. #8
    Non ho il tuo codice sotto mano non posso inventarmelo... Se tipo hai

    codice:
    Dim image1 As Image
    
    'qui fai tutti i pastrocchi sull'immagine e magari la metti nella picturebox
    
    picImage.Image = image1
    dovresti fare image1.Dispose() così a sentimento, non l'ho provato

    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  9. #9
    Utente di HTML.it L'avatar di x69asterix
    Registrato dal
    Jan 2005
    Messaggi
    1,303
    Originariamente inviato da chipdb
    Non ho il tuo codice sotto mano non posso inventarmelo... Se tipo hai

    codice:
    Dim image1 As Image
    
    'qui fai tutti i pastrocchi sull'immagine e magari la metti nella picturebox
    
    picImage.Image = image1
    dovresti fare image1.Dispose() così a sentimento, non l'ho provato

    continua ad andare in errore
    allora da una form eseguo la manipolazione quando ho finito
    codice:
     Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    
            picTextured.Image.Save(Application.StartupPath + "\temp\1.jpg", Imaging.ImageFormat.Jpeg)
           ' Form1.picDemoArea.Image = picTextured.Image
            picTextured.Image.Dispose()
            picTxtr.Image.Dispose()
            picBmp.Image.Dispose()
    
    
        End Sub
    dal form principale mi carico l'immagine eseguo un ulteriore modifica,
    poi

    codice:
    Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click
            Try
                picDemoArea.Image.Save(Application.StartupPath + "\images\" & Label3.Text, System.Drawing.Imaging.ImageFormat.Jpeg)
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Errore", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Finally
    
                My.Computer.FileSystem.DeleteDirectory(Application.StartupPath + "\temp", FileIO.DeleteDirectoryOption.DeleteAllContents)
                My.Computer.FileSystem.CreateDirectory(Application.StartupPath + "\temp")
                My.Computer.FileSystem.DeleteDirectory(Application.StartupPath + "\convert", FileIO.DeleteDirectoryOption.DeleteAllContents)
                My.Computer.FileSystem.CreateDirectory(Application.StartupPath + "\convert")
    
            End Try
    
    
        End Sub
    l'errore è sempre lo stesso

  10. #10
    Utente di HTML.it L'avatar di x69asterix
    Registrato dal
    Jan 2005
    Messaggi
    1,303
    allora dopo una lunga nottata,
    sono arrivato a questo conclusione, che credo sia il più corretto possibile:
    invece di salvare il file lo carico in memoria:

    codice:
     Clipboard.SetDataObject(picTextured.Image, True)
    e per usarlo

    codice:
     picDemoArea.Image = Clipboard.GetImage  'Image.FromFile(TextBox2.Text)
            Dim graph As Graphics = Graphics.FromImage(picDemoArea.Image)
    vi chiedo se questo è un metodo corretto?

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.