9 messaggi dal 19 giugno 2006
 Credo di aver inviato il messaggio al forum sbagliato, vero?
Sorry!


Questa routine dovrebbe servire a confrontare l'uguaglianza tra le immagini di due picturebox: perchè non si "accorge" quando le immagini delle picture sono uguali???

Private Sub Pippo(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox1.Click, PictureBox2.Click, PictureBox3.Click, PictureBox4.Click
Dim cartacliccata As Image
cartacliccata = sender.image
Cliccate = Cliccate + 1
If Cliccate = 2 Then
SecondaCarta = cartacliccata
Cliccate = 0
If Equals(PrimaCarta, SecondaCarta) Then
MsgBox("ok!!!")
Else
MsgBox("Ancora")
End If
Else
PrimaCarta = cartacliccata
End If
End Sub

Saluti a tutti
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Magari le cose funzionassero come hai scritto. Il metodo Equals, che l'oggetto Image eredita direttamente da Object, controlla esclusivamente se due istanze di due oggetti sono uguali (nel tuo caso: se PrimaCarta e SecondaCarta puntano allo stesso oggetto in memoria) oppure sono entrambe nulle. Non può essere utilizzato per verificare se due immagini sono uguali nel senso grafico del termine.

Per risolvere il problema hai diverse soluzioni. Quella che ti suggerisco è mantenere traccia dell'immagine caricata memorizzando, ad esempio, il nome dell'immagine nella proprietà Tag dell'oggetto Image (a patto che il nome sia sufficiente per discriminare le carte). A questo punto sarà sufficiente verificare l'uguaglianza tra le proprietà Tag delle due immagini.

Ciao.

.:. Marcello Rutter .:.
9 messaggi dal 19 giugno 2006
Grazie mille per avermi risposto.
Nel frattempo, dopo non so quanti tentativi, io avevo scelto come soluzione quella di memorizzare il nome dei file di immagine di origine nella proprietà ImageLocation (con grande fatica!!!) e sono riuscita nell'intento (forse con il tuo suggerimento sarebbe stato più semplice trovare prima la soluzione); tuttavia continuo a non capire: la proprietà Image può essere valorizzata attraverso il metodo FromFile della classe Image ed allora l'operatore Equals a che serve??? La proprietà Image di un Picturebox che "roba" è?
ciao ciao
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Il fatto è che quando utilizzi "FromFile" l'oggetto image crea una nuova istanza in memoria. Mi spiego meglio: FromFile legge il contenuto del file, crea uno spazio in memoria per rappresentare l'immagine, carica il contenuto del file in memoria che poi verrà visualizzata all'interno del controllo. Non c'è alcuna relazione tra il file e l'immagine in memoria se non il fatto che l'immagine è stata creata partendo dal file. Se tu ripeti questa operazione n volte verranno create n istanze diverse tutte aventi lo stesso contenuto (in quanto l'origine è lo stesso file) ma collocate in posizioni diverse della memoria (indirizzi diversi). Quando tu richiami il metodo Equals su due oggetti (quindi due variabili che memorizzano il riferimento all'oggetto), questo controlla semplicemente se le due variabili stanno puntando allo steso spazio nella memoria ... non se hanno lo stesso contenuto (come invece avviene per variabili create "per valore" quali possono essere integer, date, string, ecc. ecc.).

Per tale ragione, nel tuo caso, è necessario che tu mantenga un riferimento al nome del file che hai caricato così puoi confrontare semplicemente il nome per sapere se l'immagine in memoria è stata caricata dallo stesso file (e dedurre pertanto che si tratti della stessa immagine).

Diverso sarebbe il discorso se tu volessi sapere se due immagini sono uguali oppure si assomigliano senza conoscerne l'origine. In questo caso è necessario adottare qualche algoritmo di confronto che tipicamente è basato sull'applicazione di filtri e l'analisi dei pixel ... ma questo è tutt'altro argomento.

Ciao.

.:. Marcello Rutter .:.
9 messaggi dal 19 giugno 2006
Ciao.
Sei stato davvero chiaro nella spiegazione, grazie ancora.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.