GetPixel
-
hallo,
ich wollte von einem Programm mit GetPixel die RGB Werte auslesen lassen.
Es klappt alles. Zuerst öffne ich das Programm "Delay" und dann mein Programm, welches die Werte von "Delay" auslesen sollte. Leider bekomm ich jedes mal nur diese Ausgabe: 4294967295. Um zu testen wo der Fehler liegt habe ich
eine Ausgabe gemacht falls handle nicht klappt bzw getdc doch dies wird nicht ausgegeben das heißt es hat geklappt. Weiß vielleicht einer wo der Fehler liegt? Muss ich das Colorref anders ausgeben lassen?
Vielen Dank#include <windows.h> #include <iostream> #include <stdlib.h> #include <string> using namespace std; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; hWnd = FindWindow(0,"Delay"); if(!hWnd) cout << "Handle nicht geklappt" << endl; HDC summ = GetDC(hWnd); if(!summ) cout << "getdc nicht geklappt" << endl; COLORREF ref = GetPixel(summ,399, 299); cout << ref << endl; return 0; }
-
Was genau hast du da mit der Konsole vor? Und wie genau soll der Wert ausgegeben werden?
-
die Ausgabe sollte eigentlich 3 Zahlen sein
z.b. 200 150 30 also die Farbe vom Pixel
-
Hier mal ein Beispiel wie sowas aussehen könnte.
HWND hWnd=::FindWindow(NULL,"Rechner"); HDC hdc=::GetDC(hWnd); POINT pt; GetCursorPos(&pt); ::ScreenToClient(hWnd, &pt); int xwert=0; int ywert=0; xwert=pt.x; ywert=pt.y; unsigned long RGB=GetPixel(hdc,xwert,ywert); unsigned char xxxR = GetRValue(RGB); unsigned char xxxG = GetGValue(RGB); unsigned char xxxB = GetBValue(RGB); CString cs_rot,cs_gruen,cs_blau; cs_rot.Format("%i",xxxR); cs_gruen.Format("%i",xxxG); cs_blau.Format("%i",xxxB); CString farbe; farbe=cs_rot; farbe+=","; farbe+=cs_gruen; farbe+=","; farbe+=cs_blau; MessageBox(farbe,"RGB-Farbwert");Ich hoffe es hilft dir weiter

-
vielen dank nach sowas habe ich gesucht
leider kann ich es nicht kompiliren
fehlermeldungen:
struct std:. string has no member named format
Cstring undeclared
farbe undecleared
-
Ja ist auch klar, da es in den Bereich MFC gehört (CString).
Du musst es dann halt in einen normalen string/char umwandeln.
Oder eben als integer weiterverwenden...wie auch immer.
-
ich habs jetzt so gemacht und ich jetz kann ich es auch Kompilieren
aber es tut immernoch nicht das was ich will
Jetzt gibt es manchmal Zeichen aus z.b. ! , ,HWND hWnd=::FindWindow(NULL,"Delay"); if(!hWnd) cout << "Handle nicht geklappt" << endl; HDC hdc=::GetDC(hWnd); if(!hdc) cout << "getdc nicht geklappt" << endl; POINT pt; GetCursorPos(&pt); ::ScreenToClient(hWnd, &pt); int xwert=399; int ywert=299; xwert=pt.x; ywert=pt.y; COLORREF RGB=GetPixel(hdc,xwert,ywert); COLORREF xxxR = GetRValue(RGB); COLORREF xxxG = GetGValue(RGB); COLORREF xxxB = GetBValue(RGB); //string cs_rot,cs_gruen,cs_blau; //cs_rot=xxxR; //cs_gruen=xxxG; //cs_blau=xxxB; string farbe; farbe=xxxR; farbe+=","; farbe+=xxxG; farbe+=","; farbe+=xxxB; cout <<farbe;
-
Du verwendest einen integer in einem string!?! Den musst du doch erst umwandeln...
-
Quick & Dirty:
char buffer[32]; farbe=itoa(xxxR, buffer, 10); farbe+=","; farbe+=itoa(xxxG, buffer, 10); farbe+=","; farbe+=itoa(xxxB, buffer, 10);
-
ok es geht jetzt
vielen dank