Ho la necessità di salvare delle immagini su database (SQLServer). Il campo del db è di tipo Image.
Dalla mia applicazione l'utente seleziona un file immagine che viene caricato in una ImageBox. Una volta fatta questa operazione il file per me non deve più esistere, infatti vorrei che quando l'utente clicca su SALVA, il programma vada a leggere l'immagine contenuta nell'imagebox, la scomponga e la salvi su db.
Attualmente per gestire il salvataggio su db utilizzo questo sistema:
- Memorizzo il Path del file selezionato dall'utente
- Apro un recordset avente come origine dati la tabella in cui salvare il file
- Setto una variabile di tipo ADODB.Field col campo Image della tabella
- Apro il file in modalità Binary Access Read
- Scompongo il file inserendo ogni pezzetto in un array di tipo Byte
- Assegno l'array al campo ADODB.Field su citato
- Eseguo l'Update sul recordset
Di seguito vi riporto il codice:
Tutto questo funziona alla perfezione, ma non è esattamente ciò che vuole il mio capo.codice:' Carica l'immagine nell'Image box Private Sub cmdLoadFoto_Click() cd.ShowOpen strPath = cd.FileName ' carica l'immagine imgFoto.Picture = LoadPicture(strPath) End Sub ' Salva sul db l'immagine contenuta nell'Image box Private Sub cmdSaveFoto_Click() Dim strSQL As String Dim adoRS As New ADODB.Recordset Dim adoField As ADODB.Field Dim bytArray() As Byte strSQL = "SELECT IDFoto, Foto FROM tbImmagini" adoRS.Open strSQL, adoConn, 1, 3 adoRS.AddNew Set adoField = adoRS.Fields.Item("Foto") ' Inserisce l'immagine selezionata nel database bytArray = fnLeggiFile ' Inserisce il file nel nuovo record adoField = bytArray() imgFoto.Picture adoRS.Update Set adoRS = Nothing End Sub ' Legge l'immagine inserendola nell'array Private Function fnLeggiFile() As Byte() Dim intIndiceFile As Integer, lngDimensioneFile As Long ' Array che contine il file scomposto il byte Dim bytImmagine() As Byte Dim i As Long ' Cerca il primo indice di file disponibile nel sistema intIndiceFile = FreeFile ' Apre il file in lettura Open strPath For Binary Access Read As intIndiceFile ' Calcola la dimensione del file lngDimensioneFile = LOF(intIndiceFile) ' Ridimensiona l'array ReDim bytImmagine(lngDimensioneFile) ' Cicla il file leggendolo un byte per volta For i = 0 To lngDimensioneFile Get intIndiceFile, , bytImmagine(i) Next ' Chiude il file Close intIndiceFile ' Restituisce l'array fnLeggiFile = bytImmagine End Function
Ovvero, sarebbe preferibile riuscire a scomporre direttamente l'immagine contenuta nell'imagebox e non andare a suddividere il file fisicamente presente su HD, perchè l'utente potrebbe cancellare il file prima di salvarlo.
Voi avete suggerimenti da darmi?
Grazie a tutti![]()


Rispondi quotando
:master:
) e vedere se i codici che ti restituisce per ogni singolo pixel dell'immagine corrispondono ai bytes contenuti nel file...ma anche questo penso non sia percorribile, dal momento che i file immagine in genere contengono un'intestazione prima dei dati significativi (l'immagine vera e propria 