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  |