GetPixel funktioniert nicht?
-
Ich hab ein anderes Fenster und möchte dort den Farbverlauf eines Teils des Fensters überwachen. Ich suche speziell nach einer bestimmten Farbe, hier eine vereinfachte Darstellung die im ganzen Fenster nach der Farbe suchen soll (funktioniert leider auch nicht).
HWND wnd = FindWindow("Klassenname",0); // Funktioniert noch RECT size; GetClientRect(wnd,&size); // Größe des Fensters bestimmen HDC dc = GetWindowDC(wnd); while(true) { bool found = false; int x = 0; int y = 0; for(;x < size.right && !found; ++x) for(;y < size.bottom && !found; ++y) { COLORREF now = GetPixel(dc,x,y); if(now == RGB(183,77,87)) found = true; else // DEBUG cout << now << endl; } if(found) // soweit kommts nie } ReleaseDC(wnd,dc);Allerdings ist now bloß eine Zahl die für mich absolut keine Bedeutung hat - sie ist auch != CLR_INVALID.
Was mach ich falsch?

MfG SideWinder
-
Mit GetRValue(), GetGValue() und GetBValue() kannste dir den Farbwert aus dem COLORREF holen. Vielleicht kommt die Farbe aufgrund von irgendwelcher Farbkorrektur , die Windows evtl. durchführt gar nicht vor...
-
Du kannst ja mal SetPixel statt GetPixel verwenden. Dann siehst du auch genau welche Pixel er durchsucht (und ob es das richtige Fenster ist).
Ist das Fenster transparent (also so leicht durchsichtig)?
Btw:
Allerdings ist now bloß eine Zahl die für mich absolut keine Bedeutung hat...
Hä?
-
1. Ja werde ich machen - denkst du es könnte ein Problem sein, dass das Programm in der Win-Flash-Umgebung läuft? Also das Programm ein Flash-Programm ist?
2. Der Wert der Variable now hat für mich keine Bedeutung
MfG SideWinder
-
Du könntest ja mal nach deiner Methode einfach alle Pixel in ein zweites Fenster kopieren, dann siehst du auch gleich, was er ausliest

-
Das seh ich so auch - lauter blödsinn und Werte die keine Farben sind

MfG SideWinder
-
GetRValue(), GetGValue() und GetBValue()
-
Wie kommst du darauf, dass es keine Farbe ist? Hast du dir mal angeschaut, was das Macro RGB macht? D.h. es kommen schön große Zahlen raus ... Dass es dir nix sagt hat nix zu bedeuten

-
Habs mal etwas modifiziert:
HWND wnd = FindWindow("Klassenname",0); // Funktioniert noch RECT size; COLORREF now; HDC hdc; char debugtext[300]; GetClientRect(wnd,&size); // Größe des Fensters bestimmen hdc = GetWindowDC(wnd); while(true) { bool found = false; int x = 0; int y = 0; for(;x < size.right && !found; ++x) for(;y < size.bottom && !found; ++y) { COLORREF now = GetPixel(hdc,x,y); if(now == RGB(183,77,87)) { found = true; } else { wsprintf(debugtext,"Farbe an Position %ix%i ist RGB(%i|%i|%i) \n",x,y,GetRValue(now),GetGValue(now),GetBValue(now)); OutputDebugString(debugtext); } } } ReleaseDC(wnd,dc);