Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Zwei Bilder vergleichen, per GetBitmapBits

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.09.2006, 22:29 Uhr
~FrEak33
Gast


Schönen guten Abend,

ich möchste zwei Bilder vergleichen (beides Bitmaps). Beide werden direkt aus einer Datei (per LoadImage) geladen.

Wenn die Größe beider Bilder gleich ist, funktioniert die Funktion wunderbar (in diesem Beispiel 50x70).
Wenn jedoch eines beider Bilder um 6 Pixel größer ist, funktioniert die Funktion nicht mehr. So wie es aussieht liegt das Problem darin, dass die Pixel aus dem Speicher nicht richtig ausgelesen werden - Hier ist mir jedoch noch kein Fehler aufgekommen.

Die Funktion soll jeden Pixel vergleichen und die anzahl übereinstimmender Pixel wird durch die gesamtpixelzahl dividiert, sodass eine Przentangabe übereinstimmender Pixel herauskommt.

Hier ein wenig Quellcode:

Code:

    int cmp_count=0;
    for( int iY=0; iY < ny; iY++ )
    {
        //printf( "\nNew Line");
        for( int iX=0; iX < nx; iX++ )
        {
            int srcbytes_per_pixel=bmSrc.bmBitsPixel/8;
            int cmpbytes_per_pixel=bmCmp.bmBitsPixel/8;

            DWORD dwClrSrc = *(DWORD*)&((BYTE*)lpBitsSrc)[(iY+y)*bmSrc.bmWidthBytes+(iX+x)*srcbytes_per_pixel] & 0x00ffffff;
            DWORD dwClrCmp = *(DWORD*)&((BYTE*)lpBitsCmp)[(iY+y1)*bmCmp.bmWidthBytes+(iX+x1)*cmpbytes_per_pixel] & 0x00ffffff;

            
            BMP_COLOR24 *clr_src = (BMP_COLOR24*)&dwClrSrc;
            BMP_COLOR24 *clr_cmp = (BMP_COLOR24*)&dwClrCmp;

            if( dwClrSrc == dwClrCmp )
            {
                cmp_count++;
            }
            else
            {
                //printf( "\n%d, %d",  iX, iY );
            }
        }//for
    }//for
    pBmpCompare->fEqual = (float)cmp_count/(float)(nx*ny);



Würde mich freuen, wenn jemand irgendein statement dazu abgiebt z.B. "Hey der quellcode funktioniert bei mir wunderbar", dass ich evt. auf andere Fehlerquellen schließen kann.

Also besten Dank für jegliche Hilfe.

Ciao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.09.2006, 22:50 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi was ist x und x1 und y und y1? ansonsten solltest du nicht über die speicherbereiche rausschreiben wenn das eine kleiner bzw das andere größer ist. also gültigkeit der "koordinaten" prüfen vor zugriff auf die bilddaten.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.09.2006, 18:04 Uhr
~FrEak33
Gast


also x, x1, y,y1 sind bei mir 0. sie sollen später die Startpositionen der Bildareale sein.

@FloSoft:
Sry, kann leider mit deinem Beitrag nichts anfangen, da ich nicht genau weiß was du meinst
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: