Bildschirm auslesen
lima-city → Forum → Programmiersprachen → C/C++ und D
antworten
ausgeben
auslese
bibliothek
bildschirm
borland
code
compiler
dank
ende
grund
kleinen zahlen
konsole
pause
pixel
programm
schleifen
sekunde
system
zeile
-
Hallo,
ich möchte mit dem folgenden Programm eigentlich den Bildschirm auslesen. Leider weiß ich nicht, ob es das auch tut, weil nichts auf der Konsole ausgegeben wird. Das Programm läuft etwa 3 Sekunden und beendet sich dann.
#include <windows.h> #include <iostream> using namespace std; int main(void){ HDC dc = GetDC(0); for(int i=0;i<800;i++){ for(int j=0;j<1024;j++){ COLORREF c = GetPixel(dc,j,i); cout << GetRValue(c) << GetGValue(c) << GetBValue(c) << "\\n"; } } ReleaseDC(0,dc); return 0; }
Beitrag geändert: 19.10.2008 17:57:44 von progger -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich weiß nicht, ob es den Bildschirm ausliest, aber du kannst ja dazu schreiben, dass er das Ausgelesene auch ausgibt und so testen.
-
badur-design schrieb:
Ich weiß nicht, ob es den Bildschirm ausliest, aber du kannst ja dazu schreiben, dass er das Ausgelesene auch ausgibt und so testen.
Das mache ich doch in Zeile 10.
-
Nein, keine Fehler, keine Konsole; es läuft nur 3 Sekunden lang.
-
Du musst beachten, dass die Makros GetXValue dir keine Zahlwerte zurückliefern, sondern chars. Wenn du viel Schwarz auf dem Monitor hast (z.B. Eingabeaufforderung mit Alt + Enter in VGA-Modus geschaltet), dann siehst du nichts, weil die ganze Zeit nur nicht druckbare Zeichen ausgegeben werden (ASCII 0 und ASCII 13/10). Probiers mal mit einem typecast oder speichere die GetXValue-Resultate in geeigneten Variablen zwischen.
Beitrag geändert: 19.10.2008 19:10:11 von tischfussball -
Mit einer Typumwandlung nach int passiert leider auch nichts.
-
Das Programm will zwar nichts auf der Konsole ausgeben, aber wenn man es so umschreibt:
#include <windows.h> #include <iostream> using namespace std; int main(void){ HDC dc = GetDC(0); for(int i=0;i<800;i++){ for(int j=0;j<1024;j++){ COLORREF c = GetPixel(dc,j,i); COLORREF d = RGB(256-GetRValue(c),256-GetGValue(c),256-GetBValue(c)); SetPixel(dc,j,i,d); } } ReleaseDC(0,dc); return 0; }
gibt es ein Negativ des Screens aus (bei einer Auflösung von 1024x800).
Trotzdem danke für die Antworten ! -
Bei mir gehts mit:
HDC dc = GetDC(0); for(int i=0;i<800;i++){ for(int j=0;j<1024;j++){ COLORREF c = GetPixel(dc,j,i); cout << (int)GetRValue(c) << " " << (int)GetGValue(c) << " " << (int)GetBValue(c) << "n"; } } ReleaseDC(0,dc); return 0;
liefert mir pro zeile die r g b werte des pixels
MfG
Beitrag geändert: 19.10.2008 21:45:41 von koslo -
was für einen compiler benutzt du eigentlich?
shandris schrieb:
Kann es denn sein, dass die Werte ausgegeben werden, aber dein Programm am Ende einfach nicht pausiert?
Setz doch mal ein system ( 'pause' ) ; vor dein return.
Beitrag geändert: 20.10.2008 17:03:24 von shandris
dürfte nicht der grund sein, denn 800*1024 zeilen auszugeben dauert länger als 3 sekunden.
MfG
-
Ich benutze den Bloodshed wxDev++.
Ob es vielleicht daran liegt, dass dieser für die GUI-Bibliothek wxWidgets konzipiert ist?
Eigentlich muss ich das auch garnicht auf der Konsole ausgeben. Wenn ich ein Negativ vom Screen hinbekomme, habe ich auf jeden Fall die Pixel ausgelesen.
Trotzdem danke für die Antworten.
-
hi
ich programiere mit borland aber noch in der anfangsfahse
kann es sein das in der forschleife einfach eine u große zahl ist.
weil bei borland hängt der sich auf bei solchen schleifen und
vielleicht schließt Bloodshed wxDev++ bei solchen schleifen
einfach das programm.
versuch mal erst mal mit kleinen zahlen. -
Daran liegt es bestimmt nicht, wenn ich ein Negativ machen kann. Außerdem kann das Thema geclosed werden. Ich wollte nur die Pixel auslesen und habe es geschafft; die Konsole ist eh hässlich.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage