B+, Pixel-RGBwerte aus anderer Vollbildanwendung auslesen
Übersicht

![]() |
TrustBetreff: B+, Pixel-RGBwerte aus anderer Vollbildanwendung auslesen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich würde gern mit Blitz+ einen Pixel aus einem anderen Fenster auslesen. Versucht habe ich es mit der Desktopbuffer dll von ChristianK https://www.blitzforum.de/foru...hp?t=27434 Das klappt aber nur für dem Desktop. Sobald ich ein Programm im Vollbildmodus laufen habe, liefert es mir die rgb-Werte 0,0,0 zurück. Hier mal der Code: Code: [AUSKLAPPEN] ; Pixeldaten in einen internern Puffer speichern
GetDesktopBuffer( ) ; Pixel auslesen rgb = GetDesktopPixel( x, y ) r = (rgb And $FF0000) / $10000 g = (rgb And $FF00) / $100 b = rgb And $FF Notify r+" "+g+" "+b Wie gesagt, auf dem Desktop funktioniert es wunderbar, leider aber nicht im Vollbildmodus eines anderen Programms. Habe es auch mit den Blitz+ eigenen Funktionen versucht: Code: [AUSKLAPPEN] SetBuffer DesktopBuffer()
LockBuffer DesktopBuffer() rgb = ReadPixelFast(x,y) r = (rgb And $FF0000) / $10000 g = (rgb And $FF00) / $100 b = rgb And $FF UnlockBuffer DesktopBuffer() Notify r+" "+g+" "+b Aber auch da das selbe Problem, Desktop funktioniert, aber nicht im Vollbildmodus einenes anderen Programms. Und hier logischerweise auch das Selbe: Code: [AUSKLAPPEN] bild = SaveBuffer(DesktopBuffer(),"c:/bild.bmp")
bild = LoadImage("c:/bild.bmp") SetBuffer ImageBuffer(bild) LockBuffer ImageBuffer(bild) rgb = ReadPixelFast(x,y) r = (rgb And $FF0000) / $10000 g = (rgb And $FF00) / $100 b = rgb And $FF UnlockBuffer ImageBuffer(bild) Notify r+" "+g+" "+b Wo liegt da der Fehler? Wie kann ich das Problem lösen? Vielen Dank Trust |
||
- Zuletzt bearbeitet von Trust am Fr, Jan 07, 2011 17:52, insgesamt 2-mal bearbeitet
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Desktopbuffer ist das was du siehst. Wenn du ein Programm im Vollbildmodus laufen hast, siehst du die anderen Fenster auch nicht. Folglich kannst du auch nicht auf Farben von Pixeln schließen. Daher kann das Programm das auch nicht, nehme ich Mal an.
Ich verstehe im Moment auch nicht, wozu das nützlich sein soll. Wenn du erklärst, in welchem Zusammenhang du das brauchst, will ich mir was überlegen. mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich würde gern aus einem PC Spiel bestimmte Pixelfarbwerte auslesen.
Diese Spiel läuft im Vollbildmodus. Und so am Rande - wie ist der ASCII Code für die ALT-Taste? Habe jetzt 2 Stunden lang im I-Net ASCII Tabellen gewälzt aber ich finde nichts. Vielen Dank Trust |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du weißt nicht, was ASCII![]() ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bräuchte den ASCII Code für die ALT-Taste.
Es gibt auch ASCII-Codes für Steuertasten, also nicht darstellbare Zeichen. STRG, SHIFT usw ist mir ja bekannt, aber ich finde einfach nicht den Code für die ALT-Taste. Die Scancodes nützen mir leider nicht viel da sie nur "innerhalb" von B+ gültig sind. Aber trotzdem danke. Trust |
||
FireStorm |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
versuch es mal mit der api funktion api_getpixel
dazu brauchst du die api userlib von Timo https://www.blitzforum.de/foru...pi+userlib so könnte das dann ausshehen BlitzBasic: [AUSKLAPPEN]
Ich weiß jetzt nicht welche farbe welchem rgb wert zugeordnet ist, kann man aber durch ausprobieren herausfinden. Ich hoffe das stimmt so, wenn nicht korrigiert mich bitte. ![]() ach ja, das mit dem ALT das geht weder über scancodes noch über ASCII du brauchst die virtual key codes der API, diese sind auch in der Userlib. Verwende api_getasynckeystate($12) um sie abzufragen. ($12 ist der hexcode für ALT) Alle virtual key codes sind auf dieser Seite: http://delphi.about.com/od/obj.../blvkc.htm |
||
- Zuletzt bearbeitet von FireStorm am Fr, Jan 07, 2011 15:10, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt keine Ascii Codes für STRG, SHIFT oder ALT. Die Tasten modifizieren den Output der anderen Tasten, sie geben selbst keine Steuerzeichen zurück. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja genau sowas bräuchte ich ![]() Weiß vielleicht jemand wo man die userlib finden kann? Und was sind dann das? Diese Zeichen habe ich alle von einer Tabelle aus dem I-net. Und sie funktionieren einwandfrei. ; Tasten initialisieren Const Key_0 = 48 Const Key_1 = 49 Const Key_2 = 50 Const Key_3 = 51 Const Key_4 = 52 Const Key_5 = 53 Const Key_6 = 54 Const Key_7 = 55 Const Key_8 = 56 Const Key_9 = 57 Const Key_Left = 37 Const Key_Up = 38 Const Key_Right= 39 Const Key_Down = 40 Const Key_Alt = ???? <----- Const Key_Ctrl= 17 Const Key_Tab = 9 Const Key_Print = 44 |
||
- Zuletzt bearbeitet von Trust am Fr, Jan 07, 2011 15:12, insgesamt einmal bearbeitet
FireStorm |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hab sie gefunden
https://www.blitzforum.de/foru...pi+userlib das sind die codes in dezimalzahlen also ohne das $ der in meinem meinem letzten beitrag enthaltene link enthält auch ALT und alle sonstigen tasten im hexadezimalsystem also mit $ |
||
- Zuletzt bearbeitet von FireStorm am Fr, Jan 07, 2011 15:15, insgesamt einmal bearbeitet
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh wow,
ein großer Batzen ![]() Vielen Dank! Oh ich bitte vielmals um entschuldigung Xeres. Da habe ich wohl ASCII mit Virtual Key codes vertauscht! Danke nochmals FireStorm Habe es nun mal ausprobiert. Jedoch kommt jetzt immer! 255,255,255 raus Code: [AUSKLAPPEN] deskDC = api_GetDC(api_GetDesktopWindow()) ;speicherung des aktuellen fensters in deskDC
rgb = api_GetPixel(deskDC, 340,846) ;pixelabfrage, rückgabe im rgb-format r = (rgb And $FF0000) / $10000 g = (rgb And $FF00) / $100 b = rgb And $FF Notify r+" "+g+" "+b woran liegt das? Oder wie bekomme ich das aktive Fenster herraus? |
||
FireStorm |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das liegt daran, dass dein y wert über deinen Graphikeinstellungen liegt er muss darunter liegen, dann geht es. Vermutlich liegen deine Graphik einstellungen bei 1024x768 oder 800x600 du kannst das in den Eigenschaften nachschauen. | ||
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meine Auflösung ist auf dem Desktop und im Pc Spiel 1440x900 (Breitbild).
Ich versteh das nicht. Das kann doch nicht so schwer sein... Kann es vlilleicht sein dass api_getPixel und ReadPixelFast zwei andere Werte zurückliefern? Denn dann würde die Umrechnung auf die einzelnen Werte (R, G und B) wie sie oben steht keinen sinn mehr ergeben. Was ist denn das RPG Format? *edit* Ok ich habe den Fehler gefunden. Es lag nicht an meinem Code sondern daran, dass sobald eine Direct3D - Andwendung im Volbildmodus ist, sie scheinbar nichtmehr den Desktopbuffer benutzt. Denn dann sind alle Pixel beim auslesen immer schwarz. Habe Testweise mal mit CreateImage eine Bilddatei erstellt und versucht den ganzen Desktop reinzuzeichnen. Sowohl mit den libs also auch mit den B+ Funktionen war es ein komplett schwarzes Bild wenn die 3D Anwendung im Vollbildmodus lief. Doch sobald ich die 3D anwendung im Fenstermodus hab laufen lassen, hat es wunderbar funktioniert. Wieso und weshalb das so ist weiß ich leider nicht. Kann mir das jemand erklären? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group