2 Screenshots vergleichen
-
Hallo @all,
ich habe das folgende Problem:
Ich möchte gerne 2 Bilder miteinander vergleichen (Pixelgenau).// Die folgenden 2 Eingabewerte werden vorher gesetzt HBITMAP hbm; // Bitmap des Screenshots HDC hdc; // HDC des Screenshost // GetDIBits verwenden BITMAP bm; ::GetObject(hbm, sizeof(bm) &bm); // Bitmap-Eigenschaften ermitteln BITMAPINFO bmi; bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = bm.bmWidth; bmi.bmiHeader.biHeight = bm.bmHeight; bmi.bmiHeader.biBitCount = bm.bmBitsPixel; bmi.bmiHeader.biPlanes = bm.bmPlanes; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biSizeImage = bm.bmBitsPixel * bm.bmWidth * bm.bmHeight / 8; BYTE *pbyteBitmapBits = new BYTE[bmi.bmiHeader.biSizeImage]; ::GetDIBits( hdc, hbm, 0, bmi.bmiHeader.biHeight, pbyteBitmapBits, &bmi, DIB_RGB_COLORS ); UINT hash = HashKey(pbyteBitmapBits); delete pbyteBitmapBits;
Das Problem besteht nun darin, dass anscheinend pbyteBitmapBits anscheinend durch GetDIBits nicht korrekt gesetzt wird, daher erhalte ich immer denselben Hashwert, auch wenn sich die Bilder unterscheiden.
Woran könnte das liegen?
-
2 Screenshots vergleichen - hab da ne anwendung programmiert, die gneau das macht - aber mit C++ und WinAPI
vielleicht hilfts ja:
http://turing.fh-landshut.de/~jamann/upload/diff.zip
-
Hallo Vertexwahn,
danke für den Upload!
Ich habe meinen Code noch mal überprüft und pbyteBitmapBits enthält anscheinend den korrekten Wert.
Der Fehler müsste also bei der Hashfunktion liegen.Kennt jemand eine Möglichkeit aus pbyteBitmapBits einen korrekten Hashwert zu ermitteln?