Newsgroup: it.comp.lang.visual-basic
Titolo: <> su oggetto bitmap

Ciao, ho due oggetti bitmap inizialmente uguali
Come faccio a verificare se successivamente uno dei due ha subito modifiche?
Vorrei un
if bitmap1<> bitmap2
ma diverso non è definito su due oggetti....
Grazie

 ma diverso non ï¿œ definito su due oggetti....
tecnicamente devi controllare pixel a pixel, so che ci sono degli 
algoritmi che ti danno questa informazione con meno giri ma non ho 
esperienza in merito.
.m
-- 
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCP
http://mvp.support.microsoft.com
http://blogs.ugidotnet.org/topics
whynot [ at ] topics [ dot ] it


hash md5 sui file. Se gli hash coincidono i file sono identici.

 hash md5 sui file. Se gli hash coincidono i file sono identici.
'molto probabilmente'
Alberto

"Gazprom" <pu...@russia.invalid> ha scritto nel messaggio 
news:hqmgoh$ebr$1...@speranza.aioe.org...

non ho file ma oggetti...è lo stesso? 

 non ho file ma oggetti...è lo stesso?
si un hash lo calcoli su uno stream/byte[], anche se resta la remota 
possibilità che ci siano dei falsi positivi e/o falsi negativi.
Hai inoltre il problema, forse, delle performance, se i dati sono tanti 
calcolare l'hash non è detto sia così "rapido"


 calcolare l'hash non č detto sia cosě "rapido"
Io tenterei un paio di strade, esempio se la dimensione č identica, se
qualche punto a caso č identico, a quel punto calcolerei l'hash.


Il mio metodo non e' ortodosso, ma credo che ci si possa lavorare...
Se hai un'immagine in un picturebox ne crei una
copia in un altro picturebox,nell'originale cambi 1 (o piu') pixel:
quando copi in un terzo picturebox le 2 immagini usando
l'operatore vbSrcErase se un pixel a destinazione e' uguale
all'originale viene cancellato.
pic3.paintpicture pic1.image
pic2.paintpicture pic1.image, 0, 0, , , , , , , vbSrcErase
Ovvio che l'unico pixel diverso sopravvivera', gli altri saranno neri.
(ovvio che pic1, 2 e 3 devono essere identiche in termini di scala)
ora, se copio la meta' sinistra sopra la meta' destra usando
l'operatore vbSrcPaint (chew e' un OR) , solo i pixel che non
sono zero sopravvivono (quindi, i diversi), quindi ora ho dimezzato
la larghezza dell'area da confrontare: posso ripetere l'operazione
fino a che non ho una sola colonna di pixel, ora, visto che
vbSrcErase mi da' tutto NERO se le 2 immagini sono
uguali, avro' "piegato" e sovrapposto il nero sul nero, quindi
le 2 immagini sono uguali perche' nessun pixel e' diverso
da nero, se invece ce ne e' piu' di uno....
In pratica e' come se sovrapponessimo 2 fogli, le parti identiche
diventano trasparenti (vbSrcErase), poi pieghiamo il foglio
N volte fino ad averne una sriscia sottile, se ci sono puntini
di colore.... sono diverse :)
Il bello della tecnica e' che puoi pure mettere una "sensibilità" : es:
se i pixel si differenza sono meno di X considerale uguali.

 qualche punto a caso č identico, a quel punto calcolerei l'hash.
Concordo; direi che si potrebbe procedere con una sequenza
di checks (if...) in cascata ricorrendo al calcolo dell'hash solo se
i precedenti checks non abbiano fornito risultati; per quanto invece
riguarda l'overhead relativo al calcolo, esistono delle librerie (DLL)
ottimizzate che permettono di accelerarlo; sarebbe anche utile sapere
da dove arrivano tali immagini; se si tratta di files, si potrebbero
anche
utilizzare le informazioni (data/ora) dei files stessi oppure si
potrebbe
prevedere un calcolo dell'hash in fase di caricamento degli stessi
e/o l'eventuale salvataggio dell'hash in un "alternate data stream"
in quest'ultimo caso sarebbe banale verificare se un dato file sia
stato modificato o meno