Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di e444
    Registrato dal
    Jan 2012
    Messaggi
    37

    [VB.NET] Errore generico in GDI+ su salvataggio immagine

    Ciao a tutti... chiedo scusa ma mi sta capitando una cosa strana che non riesco a venirne a capo.

    Avevo la necessità di fare uno screen al programma che sto facendo, e salvare l'immagine in apposito percorso.
    All'inizio funzionava.... poi non capisco che è successo... ma continua a darmi un errore generico che non capisco da cosa è dovuto!...
    Allego codice.

    codice:
    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    
    
            Dim ImgA As New Bitmap(627, 294)
            Dim g As Graphics = Graphics.FromImage(ImgA)
            g.CopyFromScreen(294, 12, 0, 0, ImgA.Size)
            g.Dispose()
    
    
            Dim ImgB As New Bitmap(627, 294)
            Dim h As Graphics = Graphics.FromImage(ImgB)
            h.CopyFromScreen(294, 334, 0, 0, ImgB.Size)
            h.Dispose()
    
    
            If CB_Resize.CheckState = CheckState.Unchecked Then
                Dim nuovagrandezza As New Size With {
                            .Width = 273,
                            .Height = 128
                        }
                ImgA = New Bitmap(ImgA, nuovagrandezza)
                ImgB = New Bitmap(ImgB, nuovagrandezza)
            Else
                MsgBox("Attenzione! stai salvando le immagini nel formato originario!")
            End If
    
    
            ImgA.Save("C:\Tabelle Orario\Imm\Tabella_A.bmp")
            ImgB.Save("C:\Tabelle Orario\Imm\Tabella_B.bmp")
            
            'MsgBox("Immagini salvate con successo!")
    
    
        End Sub
    Dalla visuale del programma, premendo l'apposito pulsante "Button6", lui mi deve fare lo screen di una porzione dello schermo e me lo deve salvare con nome "Tabella_A.bmp" e fare la stessa cosa in un'altra parte dello schermo con lo stesso risultato ma, ovviamente, salvare l'immagine "Tabella_B.bmp".

    Ha tutto funzionato... poi di punto in bianco non funziona più... e il problema è la linea di codice del salvataggio... mi dice:

    Eccezione non gestita
    System.Runtime.InteropServices.ExternalException: 'Errore generico in GDI+.'

    e mi evidenzia:

    ImgA.Save("C:\Tabelle Orario\Imm\Tabella_A.bmp")

    non riesco ad uscirne... qualcuno mi può dare qualche aiuto?
    Grazie...

  2. #2
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,994
    A me il tuo codice funziona bene, ovviamente con un percorso di salvataggio diverso

  3. #3
    Utente di HTML.it L'avatar di e444
    Registrato dal
    Jan 2012
    Messaggi
    37
    a me niente da fare!.... pure cambiando il percorso di salvataggio... ho proprio cambiato disco da "C" a "D" ma niente da fare!... ho notato che se elimino la parte del percorso... il problema non si verifica... ma non mi salva le immagini.

    ImgA.Save("Tabella_A.bmp")

    In questo modo non mi da errore... ma nemmeno mi salva!....

  4. #4
    Utente di HTML.it L'avatar di e444
    Registrato dal
    Jan 2012
    Messaggi
    37
    ecco che succede se faccio il Debug e clicco sul pulsante.
    Immagini allegate Immagini allegate

  5. #5
    Utente di HTML.it L'avatar di e444
    Registrato dal
    Jan 2012
    Messaggi
    37
    Ho provato un altro sistema...

    codice:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
    
            Dim ImgA As New Bitmap(627, 294)
            Dim g As Graphics = Graphics.FromImage(ImgA)
            g.CopyFromScreen(294, 12, 0, 0, ImgA.Size)
            g.Dispose()
            If CB_RESIZE.CheckState = CheckState.Unchecked Then
                Dim nuovagrandezza As New Size With {
                            .Width = 273,
                            .Height = 128
                        }
                ImgA = New Bitmap(ImgA, nuovagrandezza)
            Else
                MsgBox("Attenzione! stai salvando le immagini nel formato originario!")
            End If
            Try
                If (ImgA IsNot Nothing) Then
                    ImgA.Save("Imm\" & InputBox("Scrivi il nome del file") & ".bmp")
                    MsgBox("Immagine salvata con successo!")
                End If
            Catch ex As Exception
                MsgBox("C'è stato un problema durante il salvataggio." & vbCrLf _
                & "Il file NON è stato salvato.", MsgBoxStyle.Critical)
            End Try
    
    
        End Sub
    Ho creato un nuovo "progetto" per vedere se fosse un problema di quello in corso... e l'ho iniziato con Visual Basic 2017 (l'altro lo stavo facendo con il 2019) e niente.... il problema mi rimane.
    Solo che ho scoperto che, se cancello ogni forma di "percorso", qualunque esso sia, tutto torna a funzionare, ma mi salva i file nella cartella di Debug.
    Nell'esempio, ho provato a dirgli di creare una cartella "Imm" e mettere dentro il file pensando lo facesse nella cartella di Debug... e invece niente da fare... mi si ripresenta il problema... non c'è modo che possa dirgli al programma di salvare il file al di fuori della cartella di Debug.
    Quello che trovo assurdo, è che all'inizio tutto funzionava!... poi ho provato ad apportare una modifica pensando di usare il "SaveFileDialog"... ma avevo scoperto che mi tornava più noioso e l'ho tolto... ma da allora... ha smesso di funzionare.

    Sto nel pallone!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quell'errore c'è solo quando una delle cartelle del percorso non esiste.

    Se usi solamente

    ImgA.Save("Tabella_A.bmp")

    il file viene salvato nella cartella

    bin\Debug

    o nella

    bin\Release

    del tuo progetto (a seconda di quale configurazione stai usando).

    Quindi, sei sicuro che le cartelle che indichi esistano?
    Prova a salvare su C:\Temp che dovrebbe esistere sul tuo PC.
    Ultima modifica di oregon; 24-04-2020 a 20:29
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di e444
    Registrato dal
    Jan 2012
    Messaggi
    37
    dunque...

    ho fatto questa prova in base al tuo quesito...

    Ho inserito questo:
    codice:
    Imports System.IO
    
    Public Class Form1
    
        Dim numero As Integer
        Dim Percorso As String = My.Computer.FileSystem.SpecialDirectories.MyPictures & "\Tabelle Orario\"
    
        Private Sub BTN_AGGIORNA_Click(sender As Object, e As EventArgs) Handles BTN_AGGIORNA.Click

    Nell'evento LOAD del form ho inserito questo:
    codice:
           End If
    
    
            My.Computer.FileSystem.CreateDirectory(Percorso)
    
    
            Button4_Click(Nothing, Nothing)
    In questo modo, appena si carica il programma, lui mi crea una cartellina di nome "Tabella Orario" nel percorso specificato prima... e nell'evento click del pulsante salva ho impostato in questo modo:
    codice:
     If (ImgA IsNot Nothing) Then
                    Dim OrarioFinePausa As Date = Date.Now.AddMilliseconds(1000)
                    Do Until Date.Now > OrarioFinePausa
                    Loop
                    ImgA.Save(Percorso & TB_Scenario.Text & "_immagine" & numero & ".bmp")
                    numero += 1
                    MsgBox("Immagine salvata con successo!")
                End If
    Così facendo, riesco a far salvare le immagini che mi interessano in una cartella predefinita di nome "Tabelle Orario" nella cartellina "Immagini" del computer dell'utente.

    si... ora così sembra che mi sta funzionando.
    Non capisco perche all'inizio funzionava e poi non ha più funzionato ma... l'importante è che sembra aver risolto.


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 © 2024 vBulletin Solutions, Inc. All rights reserved.