Farbe eines Pixels auf dem Bildschirm?
-
Hallo!
wie kann ich die Farbe eines Pixels auf dem Bildschirm herausfinden?
Danke, peethebee
-
In Standard C++ kannst du einen Text ausgeben, in dem du den Benutzer bittest, doch mal für dich nachzuschauen.
Alles andere hängt von der Laufzeitumgebung und/oder der verwendeten Grafikbibliothek ab.
-
Ich kann zwar in einigen Sprachen programmieren, bin aber noch absoluter Neuling in C++. Ich habe Dev-C++ 4.9.9.2 installiert, ich glaube, die verwenden den mingw-Compiler.
Danke, peethebee
-
Unter WinAPI:
Handle vom Desktop holen
per GetPixel Pixel holfen
Farbe bestimmenoder
kompletten Bildschirminhalt holen und in einen temporären Buffer kopieren und damit machen was man will:class BitmapDIBUncompressed32Bit { public: BitmapDIBUncompressed32Bit(char * filename); BitmapDIBUncompressed32Bit(Bitmap6x6x6SGFF *sgf); BitmapDIBUncompressed32Bit(HDC hdc, int width, int height); int getWidth() const; int getHeight() const; void Save(char * filename); virtual ~BitmapDIBUncompressed32Bit(); void Release(); HDC getHDC(); UINT * getBytes() const; private: UINT *BitmapBytes; BITMAPINFO BitmapInfo; BITMAPINFOHEADER BitmapInfoHeader; HDC BitmapHDC; HBITMAP BitmapHandle; }; void CaptureScreen(BitmapDIBUncompressed32Bit &bitmap);
CaptureScreen holt den kompletten Bildschirminhalt
Den Quellcode dazu kannst du dir hier downloaden
http://turing.fh-landshut.de/~jamann/Tunnel Effect.zip
-
p.s. ich will eine Texterkennung (OCR) schreiben, sodass die Abfrage nicht möglich ist, sondern nach möglichkeit unter Windows (XP) automatisch funktioneren muss.
-
Danke, Vertexwahn, ich werde es versuchen.
peethebee
-
So, mehr als 2 Jahre sind vergangen seitdem dieser Thread gepostet wurde, diesen greif ich doch glatt wieder auf da ich dasselbe Problem habe.
Also, ich habe jetzt schon ne weile gesucht, und nichts gefunden was ich gebrauchen könnte.Ich möchte einen RGB Wert eines Pixels der auf dem Bildschirm ausgegeben wird ermitteln. (Wirklich nur eines Pixels, das ganze Bitmap wird nciht benötigt)
Folgendes Beispiel habe ich gefunden, was einigermaßen einfach war.
int x, y; HWND window_handle; HDC hdc; COLORREF color; int main(){ x = 100; y = 100; hdc = GetDC(window_handle); color = GetPixel(hdc,x,y); }
Nun funktioniert das beispiel irgendwie nicht und ich habe auch keine ahnung wozu hdc da ist und wie man dies einsetzt o.0
-
window_handle braucht auch einen Wert (GetDesktopHandle())
-
Falsches Forum! Gehört ins Win32-API-Forum.
-
es kommt halt wirklich darauf an was du machst, in Allegro mit C++ geht das zum Beispiel so:
Zuerst definierst du Farben:
white = makecol(255,255,255);
black = makecol(0,0,0);Dann machst du einfach:
int a;
a= getpixel(screen, x, y);
if(a==black)
{
//mach was
}
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
XaTrIxX schrieb:
es kommt halt wirklich darauf an was du machst
Naja, ich möchte halt beobachten ob ein Pixel die Farbe ändert, soll das der fall sein dann "tue was" habe mir schon diverse sachen von WinAPI angeschaut also würde ich das noch gerne mit WinAPI fortsetzen.
XMaster schrieb:
window_handle braucht auch einen Wert (GetDesktopHandle())
Würde das auch genauer gehen? Habe auch einpaar beispiele gesehen wo GetDesktopHandle() war, habe sie nicht verstanden und haben so auch nicht funktioniert
Kennt einer vielleicht eine Ausführliche Referenz zu WinAPI??
-
ja, nennt sich msdn: GetDC()
-
War das dann nicht irgendwie so:
int x, y; HWND window_handle; HDC hdc; COLORREF color; int main(){ x = 100; y = 100; hdc = GetDesktopHandle(GetDC(NULL)); color = GetPixel(hdc,x,y); }
-
HDC desktopDC=GetDC(NULL); COLORREF farbe=GetPixel(desktopDC,x,y); BYTE rotWert=GetRValue(farbe); BYTE gruenWert=GetGValue(farbe); BYTE blauWert=GetBValue(farbe); ReleaseDC(desktopDC);
-
Hmm jetzt kommt eine Fehlermeldung:
[Linker Error] undefined reference to 'GetPixel@12'
wenn ich ReleaseDC(desktopDC) auskommentiere
sonst kommt:
cannot convert 'HDC_*' to 'HWND_*'for argument '1' to 'int ReleaseDC(HWND_*, HDC_*)'
-
Fipptehler:
ReleaseDC(NULL,desktopDC);
-
was ist mit dem oberen fehler? der besteht jetzt noch. Habe ich was nicht includet?
habe <iostream> und <windows.h>
-
msdn sagt: "Library: Use Gdi32.lib."
-
Alles klar
Danke