Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    161

    [C++] Comparazione di immagini

    ciao a tutti avrei bisogno di aiuto per un programma...
    Quello che vorrei fare io sarebbe confrontare due immagini bmp e riconoscere se sono uguali... le immagini da confrontare hanno le stesse dimensioni e sono piuttosto simili, infatti sono dei sono dei rettangoli con all' interno una lettera dell' alfabeto o un numero...
    Io vorrei confrontare una immagine che si trova nella clipboard con una presente sul mio computer e capire se sono uguali oppure no... Ho provato a cercare un po in giro e ho trovato alcune possibili soluzioni:
    - memcmp che però non so se funzioni in questo caso dato che le immagini sono simili
    - confronto pixel per pixel, che però ho letto che impiega un po di tempo per farlo, anche se io stò parlando di immagini di tipo 30 pixel per 30 pixel...

    In ogni caso non so come caricare immagini in c++ qualcuno potrebbe darmi una mano? e magari anche mettermi sulla buona strada per quanto riguarda l' algoritmo?

    grazie in anticipo.

  2. #2
    C++ e quali librerie?
    Una immagine bmp la puoi pensare come una matrice con tante righe e colonne equivalenti alla risoluzione. Una immagine a 256 colori significa che ogni cella è un byte.
    A questo punto devi vedere quali sono i byte diversi tra le 2 immagini.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    161
    ok credo di essere sulla strada giusta...

    codice:
    #include <allegro.h>
    #include <stdio.h>
    #include <conio.h>
    #include <winalleg.h>
    using namespace std;
    
    int main()
    {
        int a,b,x,y,rosso,verde,blu,alfa,diverse=0;
        allegro_init();
        BITMAP *uno; //Declare a BITMAP called my_pic, setting it to NULL
        
        PALETTE palette1; 
        uno = load_bitmap("1.bmp",palette1);
        
        PALETTE palette2;
        BITMAP *due; //Declare a BITMAP called my_pic, setting it to NULL 
        char *fromClipboard;
        
        
        OpenClipboard(NULL);
        HANDLE himg=GetClipboardData(CF_BITMAP);
        //char * buffer = (char*)GlobalLock( himg );
    	
    	GlobalUnlock( himg );
    	due = load_bitmap (himg,palette2);
        CloseClipboard();
        
        
        getch();
        
        for (x=1;x<27;x++)
            for(y=1;y<30;y++)
            {
                            a=getpixel(uno,x,y);
                            b=getpixel(due,x,y); 
                            printf ("%i  %i\n",a,b);
                            if (a!=b)
                               diverse=1;
            }
    if (diverse==1)
       printf ("\nLE IMMAGINI SONO DIVERSE");
    else
        printf("\nLE IMMAGINI SONO UGUALI");
    getch();
       
    }END_OF_MAIN()
    In poche parole ho installato allegro, poi ho caricato la prima bitmap che si trova sul mio computer, poi ho cercato di caricare quella che si trova nella clipboard e poi ho fatto controllo pixel per pixel con getpixel...
    Il problema è che non riesco a caricarla dalla clipboard e non capisco il perchè... infatti così mi da questo errore:
    codice:
    invalid conversion from `void*' to `const char*'
    qualcuno ha qualche idea su come caricare dalla clipboard una bitmap? cioè da handle a bitmap?

    grazie in anticipo...

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    dove ti da l'errore?

    ps: ti conviene mettere nei for che se diverse è == 1 non continuino perchè per immagini grandi potrebbe risentirne in prestazioni

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    161
    hai ragione non ci avevo pensato...
    comunque l' errore me lo da su

    due = load_bitmap (himg,palette2);

    ma io non ho la più pallida idea di come si possa trasformare 1 handle in un bitmap ho cercato un po in giro per internet e ho provato un po di soluzioni ma nessuna funzionava...
    Mi potresti dare 1 suggerimento su come fare per favore?
    grazie in anticipo

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    161
    up

  7. #7
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    guarda sull'msdn, li troverai qualcosa..

    se ne era parlato anche poco tempo fa con una discussione di wolverinex sulle gdi plus e le bitmaps

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    161
    ho provato a guardare su msdn ma non mi dice niente perchè quell' handle li sarebe quello di getclipboarddata capito?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    225
    Tra piuttosto simili e uguali, in informatica, c'e' una differenza abissale. O sono la STESSA immagine o difficilmente un confronto byte a byte restituirà true.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    161
    ma infatti sono la stessa immagine... solo che una è gia salvata sul mio computer e una è presa dalla clipboard... però non so come fare a prenderla dalla clipboard... cioè so che devo usare
    GetClipboardData(CF_BITMAP)
    però non so come trasformare l' handle in cui salva l' immagine in una bitmap (sto usando allegro come libreria grafica)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.