Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - confronto tra immagini
Forum - C# / VB.NET - confronto tra immagini

Avatar
I)eathBringer (Normal User)
Pro


Messaggi: 127
Iscritto: 11/08/2008

Segnala al moderatore
Postato alle 19:00
Domenica, 30/11/2008
Sto creando un programma per visualizzare e modificare le immagini e volevo che, se si cerca di chiudere il programma (o semplicemente l'immagine), se l'immagine visualizzata è diversa da quella originale, mi appaia una msgbox per avvertirmi che l'immagine non è stata salvata. Ad esempio, se applico il negativo all'immagine visualizzata e provo a chiuderla mi chiederà se la voglio salvare mentre riapplicandogli il negativo ridiventa uguale a quella di partenza e, provando a chiuderla, non mi darà nessun messaggio.
Ho provato a confrontare le due immagini in vari modi ma senza nessun risultato. Qui ne trascrivo due:
modimg = immagine modificata
PictureBox1.Name = percorso dell'immagine iniziale
StartImage = immagine di partenza

Codice sorgente - presumibilmente C# / VB.NET

  1. If Not modimg.Equals(Bitmap.FromFile(PictureBox1.Name)) Then
  2. '...



Codice sorgente - presumibilmente C# / VB.NET

  1. If Not modimg.Equals(StartImage) Then
  2. '...



il primo non mi dà nessun risultato;
il secondo mi considera le immagini uguali solo se non vengono modificate nemmeno una volta.
Come posso fare?

PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 19:26
Domenica, 30/11/2008
ciao, io fare un controllo pixel per pixel
al primo pixel diverso segnala l'errore

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:04
Lunedì, 01/12/2008
In effetti, il controllo pixel-pixel è la strada più immediata, ma il metodo GetPixel della classe Bitmap è particolarmente lento, e già su immagini da 400x320 il tempo di elaborazione è di qualche secondo. Io ti suggerisco di lasciare com'è, ma se proprio vuoi continuare, usa una variabile temporanea che tenga traccia dei cambiamenti. Se solo il negativo riporta l'immagine a com'era precedentemente, basta usare un valore booleano per il negativo e uno per tutte le altre modifiche. In alternativa, puoi progettare una logica che usi valori e operazioni aritmetiche in modo che la funzione negativo applicata due volte dia lo stesso risultato che si aveva prima dei filtri (ad esempio la moltiplicazione per -1).

Ultima modifica effettuata da Il Totem il 01/12/2008 alle 17:04
PM Quote