glReadPixels ??
-
Danke euch erstmal für die Antworten..
@maxi
Ich muß sagen ich hab mich zuvor noch nie mit OpenGl beschäftigt deshlab nicht schlagen wenn ich mal nachfrag wie du das mit dem Handle meinst..hab sowas zwar glaub ich schon mal beim COMport benutzt aber wirklich verstanden hab ich das nicht ..
was ist ein rendertarget ? Ok der name sagt es ja bereits aber wie setz ich das ..
wäre nett wenn du mir oder auch jemand anderst noch ein paar genauere informationen geben könnte..
und dann steht auch noch meine Frage mit dem Format meiner RGB daten im Raum welche ich mir leider nicht wirklich erklären kann
danke euch schon mal
gruß
-
Ich habe doch geschrieben, dass deine Annahme über die RGB-Farbe korrekt ist.
-
ja sorry du hast wohl den Beitrag geschrieben als ich meinen geschrieben hab..
Jedenfalls war der noch nicht da als ich geschrieben hab *G*So wie ich das jetzt verstanden habe ist also OpenGl nicht das richtig für meine Zwecke da ich ja aus Dem FrameBuffer nur daten auslesen kann die vorher in einer OpenGl anwendung reingeschrieben worden sind.. das heißt sollte ich im windows media player zb ein video abspielen wird im Framebuffer wahrscheinlich nie was drin stehen
hab ich das so richtig verstanden ?
Das muß ich also dann über wie du geschrieben hast über Windowsspeziefische Funktionen bzw über einen Handler machen ..
Wo kann ich den da ein bischen mehr informationen drüber finden gibts da vielleicht irgendwo ein tutorial oder so ..thx
Gruß
Dominik
-
also, du bekommst das Handle (das is eig einfach nurn zeiger, mit dem du ein bisteimmtes objekt ansprichst, hier also dein pixelbuffer, indem falle der desktop) über GetDC(HWND_DESKTOP). Damit bekommst du eien HDC (Handle to Device Context -> da wird drauf gemalt).
Dann kannst du mit GetPixel(x, y) die Farbe eines Pixels auslesesn. Is aber relativ langsam. Besser gehts mit GetDIBits, damit kannst du glaub ich den ganzen speicher auslesen und in einem angebenen speicher speichern. Musst ma in der MSDN gucken nach den funktionen
-
ah ....
danke werde ich mir mal anschauen wenn ich heut abend von der arbeit komm..
-
danke das mit den HANDEL und dem ReadPixel funktioniert soweit ganz gut eventuell muß ich noch auf GetDIBits umsteigen da ich jede sekunde 25 mal den Mittelwert der vorherschenden Farbe eines Bildschirmsegments berechnen will was doch ein ziehmlich großer aufwand ist und das obwohl ich das Segment nur mit einem 16 Pixel Raster abscanne
Zudem ist die Frage ob zb Anwendungen wie der Mediaplayer mit einbezogen werden.. naja muß ich mal testen
-
Du könntest die Mittelwertberechnung durch einen Pixel-Shader beschleunigen.
1. Mit GetDIBits den Bildschirminhalt lesen
2. Daraus eine Textur erstellen
3. Mit OpenGL oder D3D und einem Pixel-Shader per Downsample-Filter das Bild so lange verkleinern, bis es nur noch 1x1 Pixel groß istOder du versuchst, z.B. mit SSE noch was rauszuholen.
Neo120484 schrieb:
Zudem ist die Frage ob zb Anwendungen wie der Mediaplayer mit einbezogen werden.. naja muß ich mal testen
Wahrscheinlich nicht, wenn er mit Overlays arbeitet.
-
per Downsample-Filter das Bild so lange verkleinern, bis es nur noch 1x1 Pixel groß ist
und der pixel duerfte dann so mittel-grau sein

-
Neuere Grafikkarten arbeiten intern mit höheren Genauigkeit und können Fließkomma-Texturen verarbeiten. Das sollte dann reichen.
-
man braucht doch keine floating-point pixel-shader um ein paar rgbs zu addieren.
ich bezweifle auch, dass es damit tatsaechlich schneller geht - 128bit-pixel kosten ganz schoen bandbreite.
eigentlich ist fuer sowas mal mmx erfunden worden.
-
kann mir dann jemand von euch sagen wie ich auf die Pixelfarben der Overlays zugreifen kann?
Würde ja gerne ein Skizze posten wie ich mir das Vorstelle aber leider weiß ich nicht/find ich nicht wie ich das hier im Forum mach und webspace hab ich grad nicht zur verfügung...
-
weis da keiner irgend eine lösung kann ich nicht direkt irgendwie einen Handel auf die Overlay ebene machen oder ähnliches?