Salvare immagine con riferimento ClientiDataSet.Clienti.NumeriProgress...

sabato 14 settembre 2013 - 10.11

.net Profilo | Newbie

Salve a tutti vorrei salvare un'immagine acquisita da una webcam in una cartella, con nome uguale al numeroprogressivo della scheda del database in uso + "1", e poi visualizarla quando faccio click sul pulsante che apre TabControl1, TabPage1, ImmagineD1PictureBox.
Ma c'è qualcosa che mi sfugge, qualcuno mi può dare un suggerimento, Grazie


Questo e il fragmento di codice che gestice il salvataggio:
Public Class frmsalva

Private Sub buttonSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonGrab.Click
saveImage()
End Sub

Private Sub SaveImage()
Dim ImmaginedaSalvare As Object = ClientiDataSet.Clienti.NumeriProgresiviColumn.DefaultValue
Dim Uno As Byte = 1
If Not My.Computer.FileSystem.FileExists("C:\Documents and Settings\ACER\Desktop\Prova\Immagini") Then
End If

System.IO.Directory.CreateDirectory("C:\Documents and Settings\ACER\Desktop\Prova\Immagini")
Try
ImmaginedaSalvare.Save("C:\Documents and Settings\ACER\Desktop\Prova\Immagini\" & Uno.ToString() &
".Jpeg", Imaging.ImageFormat.Jpeg)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Questo è il fragmento di codice che gestice la visualizasione dell'immagine

Public Class frmVisualiza

Private Sub TabControl1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabControl1.Click, TabPage1.Click
Dim ImmaginedaImport As Object = ClientiDataSet.Clienti1.NumeriProgresiviColumn.DefaultValue
Dim Uno As Byte = 1

ImmagineD1PictureBox.Image = ImmaginedaImport + Uno

Private Sub buttonCancella_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

ImmagineD1PictureBox.Image = Nothing



Quando acquisisco un'immagine e premo button_save mi da questo errore:

Impossibile trovare il membro publlico 'save' nel tipo 'DBNull'

Invece quando premo TabKCkontrol1_Click mi da questo errore:

L'operatore '+' non è definito per tipo 'DBNull' e tipo 'Byte'.

Vinsent Profilo | Senior Member

>Salve a tutti vorrei salvare un'immagine acquisita da una webcam
>in una cartella, con nome uguale al numeroprogressivo della scheda
>del database in uso + "1", e poi visualizarla quando faccio click
>sul pulsante che apre TabControl1, TabPage1, ImmagineD1PictureBox.
>Ma c'è qualcosa che mi sfugge, qualcuno mi può dare un suggerimento,
>Grazie
>
>
>Questo e il fragmento di codice che gestice il salvataggio:
>Public Class frmsalva
>
>Private Sub buttonSave_Click(ByVal sender As System.Object, ByVal
>e As System.EventArgs) Handles buttonGrab.Click
> saveImage()
> End Sub
>
> Private Sub SaveImage()
>Dim ImmaginedaSalvare As Object = ClientiDataSet.Clienti.NumeriProgresiviColumn.DefaultValue
Non ho capito cosa vuoi fare....

> Dim Uno As Byte = 1
>If Not My.Computer.FileSystem.FileExists("C:\Documents and Settings\ACER\Desktop\Prova\Immagini")
>Then
> End If
Stai verificando l' esistenza di un file mentre il percorso che gli passi indica una cartella....

>
>System.IO.Directory.CreateDirectory("C:\Documents and Settings\ACER\Desktop\Prova\Immagini")
> Try
>ImmaginedaSalvare.Save("C:\Documents and Settings\ACER\Desktop\Prova\Immagini\"
>& Uno.ToString() &
> ".Jpeg", Imaging.ImageFormat.Jpeg)
> Catch ex As Exception
> MsgBox(ex.Message)
> End Try
> End Sub
La variabile "ImmaginedaSalvare" come è dichiarata sopra non mi sembra un' immagine...

>Questo è il fragmento di codice che gestice la visualizasione
>dell'immagine
>
>Public Class frmVisualiza
>
>Private Sub TabControl1_Click(ByVal sender As Object, ByVal e
>As System.EventArgs) Handles TabControl1.Click, TabPage1.Click
>Dim ImmaginedaImport As Object = ClientiDataSet.Clienti1.NumeriProgresiviColumn.DefaultValue
Qui c' è di nuovo il problema della dichiarazione/valore, se deve essere un' immagine perchè dichiari object? Mentre non capisco il valore che gli assegni....cos' è?

> Dim Uno As Byte = 1
>
> ImmagineD1PictureBox.Image = ImmaginedaImport + Uno
Fai una somma impossibile....

>
>Private Sub buttonCancella_Click(ByVal sender As System.Object,
>ByVal e As System.EventArgs) Handles Button3.Click
>
> ImmagineD1PictureBox.Image = Nothing
>
>
>
>Quando acquisisco un'immagine e premo button_save mi da questo
>errore:
>
>Impossibile trovare il membro publlico 'save' nel tipo 'DBNull'
>
>Invece quando premo TabKCkontrol1_Click mi da questo errore:
>
>L'operatore '+' non è definito per tipo 'DBNull' e tipo 'Byte'.

In pratica crei delle variabili di tipo object che è "generico" cioè comprende più o meno tutto....e potrebbe andare bene facendo una conversione verso un tipo "immagine" dove serve....mentre quando gli assegni un valore sbagli infatti gli errori ti riportano che il tipo è DBNull e non un immagine...

.net Profilo | Newbie

Ciao Vinsent, intanto grazie per avermi risposto, quello che voglio fare è questo:
Ho creato un database, nella tabella "Clienti" ho inserito 4 campo chiamati ImmagineD1,D2,D3,D4 e li ho impostati come "tipodati=image" , perciò vorrei poter salvare degli scatti non direttamente nel'database, ma in una cartella che porta come nome il numero progressivo della scheda aperta + 1 per D1, +2 per D2..., in modo che quando apro la scheda con numero progressivo 1, nella picturebox1 mi apparirà la foto 11.bmp, per la picturebox2 mi apparirà la foto 12.bmp, per la picturebox3 la foto 13.bmp e per la picturebox4 la foto 14.bmp.
Spero di essermi spiegato, ti sarei molto grato se mi dai una mano a capire dove svaglio. Grazie

Vinsent Profilo | Senior Member

Se devi salvare le immagini in una cartella e non nel DB, in quest' ultimo i 4 campi devono essere di tipo "testo" e devi assegnare il percorso del file.
Quindi, quando salvi l' immagine inserisci nel DB il percorso nella colonna corrispondente, quando devi visualizzare un immagine ne recuperi il percorso.
A grandi linee la logica è questa per quello che ho capito...per realizzare il tutto dipende da cosa sai fare o meno....
Sai "lavorare" con file e directory?
Sai leggere/scrivere dati su un dataset?

.net Profilo | Newbie

Ciao, e da poco che sono alle armi con vb2010, sono tre settimana che ci provo ma mi sono inchiodato in questo concetto di leggere\scrivere dati nel dataset.

per salvare i dati ho fatto cosi:

>Private Sub buttonSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonSave.Click
'Creo una variabile che e uguale al numero progresivo della scheda aperta.(seguendo il tuo sugerimento ho cambiao il tipo variabile da object a string )
> Dim ImmaginedaImport As String = ClientiDataSet.Clienti.NumeriProgresiviColumn
'Creo una variabile numerica uguale a 1
> Dim Uno As Byte = 1
> SaveFileDialog1.ShowDialog()
> SaveFileDialog1.FileName = ("C:\Documents and Settings\ACER\Desktop\Immagini\*.bmp")
Ma non so come inserire la variabile nel "*.bmp" in modo che il file si chiame con il numeroprogresivo+1

Per recuperarlo avevo pensato una cosa del tipo:
> OpenFileDialog1.ShowDialog()
> ImmagineD1PictureBox.Load("C:\Documents and Settings\ACER\Desktop\Immagini\*.bmp")

Ma anche qui nasce il problema di recuperare il file = numeroprogresivo+1

Per quanto riguarda leggere\salvare nel dataset no o proprio idea, puoi darmi qualche indicazione, o codice esempio?

Grazie intanto per la tua risposta, ho modificato il tipodati da image a ntext nella tabella del database, e logico in fondo non devo lavorare con
una immagine ma con una stringa.

Vinsent Profilo | Senior Member

Non offenderti ma credo che non conosci diversi concetti base, dovresti concentrarti su cose specifiche ed approfondirle, così come poni la richiesta ci sono troppe cose per aiutarti bene.
Le "dialog" servono all' utente per fare una scelta, nel tuo caso non devi usarle visto che le immagini vanno gestiste in un' altro modo.
Per i dataset non so indicarti una guida, comunque puoi pensarli come un file excel dove ci sono i "fogli" con colonne, righe e celle. Quindi per recuperare il dato di una cella devi indicare il "foglio", la colonna e la riga.
Per il nome del file dipende, visto che le 4 immagini sono legate al "cliente" potresti creare una cartella per ognuno e nominare le immagini in modo fisso tanto poi le recuperi dalla cartella "cliente"...non so se mi segui....
Visto che sei alle prime armi, prova a leggere qui:
http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_dotNET/
non c' è tutto per "iniziare" ma può tornarti utile.
Ti stò facendo un' esempio a "tempo perso" quindi non so quando lo finisco...se vuoi inviarmi il tuo progetto così ci capisco meglio, zippalo e caricalo su dropbox, skydrive o quello che usi e inviami il link via email qui:
nico.foster-4opudu6p@yopmail.com
è l' alias di un email usa e getta che posso vedere solo io è può solo ricevere, se lo fai avvisami che controllo l' email giusta....
Ciao

.net Profilo | Newbie

Ciao Vincent, ti ho mandato per mail "nico.foster-4opudu6p@yopmail.com" il file zippato del progetto, e molto leggero.
Grazie per il link della guida, sto anche leggendo un'altra guida "A Scuola con Visual Basic 2010", e ho acquistato un libro molto interesante "Visual BaSIC 2010 Spiegato a Mia nonna".
Mi sono accorto che non avevo aggiunto nelle query "Insert e fill" le picturebox, necessarie credo per salvare i dati (stringhe di testo del percorso) delle relative picturebox.
> frmClienti.ClientiTableAdapter.InserimentoImmagini(ImmagineD1PictureBox.ImageLocation, ImmagineS1PictureBox.ImageLocation, >ImmagineD2PictureBox.ImageLocation, ImmagineS2PictureBox.ImageLocation)
Sto lavorando per creare i codice che mi salvano\rinominano e caricano i percorsi dei file nelle apposite picturebox.
Grazie per i tuoi suggerimenti e per la tua disponibilità.
A Presto.

.net Profilo | Newbie

Ciao Vincent e a tutti, sono riuscito a fare questo codice che mi permette di fare ciò che mi serve.
Per Salvare i file:
> Public Sub saveImage()
> Dim progresivi As String
> progresivi = frmVisualiza.NumeriProgresiviLabel1.Text
> Dim uno As String = 1
> Dim due As String = 2
> Dim tre As String = 3
> Dim quattro As String = 4
> txtFileName.Text = ("C:\Documents and Settings\ACER\Desktop\Prova\Immagini\" & progresivi + uno.ToString() & ".Jpeg")
> SendMessage(hHwnd, WM_CAP_FILE_SAVEDIB, 0&, ("C:\Documents and Settings\ACER\Desktop\Prova\Immagini\" & progresivi + >uno.ToString() & > ".Jpeg")) 'Imaging.ImageFormat.Jpeg )
Adesso devo creare una condizionale " IF" per associare il salvataggio alla variabile e picturebox corrispondente.

Invece per recuperare i file o fatto cosi:

> Public Sub ImmagineD1PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImmagineD1PictureBox.Click, >ImmagineS1PictureBox.Click, ImmagineD2PictureBox.Click, ImmagineS2PictureBox.Click
>
> Dim progresivi As String
> progresivi = Me.NumeriProgresiviLabel1.Text
> Dim uno As String = 1
> Dim due As String = 2
> Dim tre As String = 3
> Dim quattro As String = 4
> ImmagineD1PictureBox.ImageLocation = ("C:\Documents and Settings\ACER\Desktop\Prova\Immagini\" & progresivi + uno.ToString() & >".Jpeg")
> ImmagineS1PictureBox.ImageLocation = ("C:\Documents and Settings\ACER\Desktop\Prova\Immagini\" & progresivi + due.ToString() & >".Jpeg")
> ImmagineD2PictureBox.ImageLocation = ("C:\Documents and Settings\ACER\Desktop\Prova\Immagini\" & progresivi + tre.ToString() & >".Jpeg")
> ImmagineS2PictureBox.ImageLocation = ("C:\Documents and Settings\ACER\Desktop\Prova\Immagini\" & progresivi + quattro.ToString() & >".Jpeg")
>
> End Sub

Come ti sembra?


Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5