PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C/C++ "Desktoppiette" gesucht.



Digedag
28-12-2006, 15:39
Ich suche eine Funktion, die mir die (aktuellen) RGB Werte eines Pixels auf meinem Desktop zurückgibt. So, wie es zum Beispiel die Werkzeuge "Pipette" bei Photoshop und "Color Picker" bei Gimp mit Bildern machen.
Kennt einer sowas?

Mein Betriebssystem: Linux
Desktopoberfläche: X.org
;)

tradiaz
30-12-2006, 21:09
das müsste man wohl mit xlib machen.
dazu brauchst du die position der maus und das fokusierte window.
lässt sich eigentlich alles mit XEvent machen.
dann musst du mit XGetWindowAttributes display und drawable in erfahrung bringen. dann machst du ein Image draus
http://xfree86.org/current/XGetImage.3.html.
und dann kriegst du den pixel mit XGetPixel.
setzt allerdings ein wenig ahnung vom umgang mit Xlib vorraus, is aber nicht so schwer davon abgesehen, dass das generve mit den farben in xlib furchtbar ist.
aber wenn du glück hast, gibts auch ne einfachre lösung mit gdk.
da findest du die api reference auf developer.gnome.org

Fabeltier
31-12-2006, 20:51
Hallo,
Ich kann Dir leider auch keine genauere Information geben. Unter Windows hab ich mal sowas aehnliches aus dem Buch von Charles Petzold (Windows Programmierung) kompiliert und damit rumgespielt, ist allerdings in C und einige Jahre her. Vllt gibt es Dir ja nen Ansatzpunkt mal anzusehen, wie das unter Win aussieht, s'war afair im Kapitel 16. "Der Paletten Manager" - bin mir leider aber nicht mehr sicher :)

C oder C++ bietet zunaechst mal standardmaessig keine Funktion an, um einen Farbwert der Systempalette des Desktops per Mousezeiger abzufragen! Fuer das deuten der Farbwerte, den Mousezeiger und die Nachrichtenabfrage wirst Du eine GUI Library brauchen, mit der Du Dich erst mal beschaeftigen solltest, also GTKmm oder Qt jeweils plus Buch/Tutorial fuer Linux oder relativ plattformunabhaengig. Davor solltest Du aber einigermassen sattelfest in C++ sein.

Je nach verwendeter Library sollte es Funktionen geben, die Position des Mousezeigers und den mom Farbwert des Pixels abzufragen (funktioniert dann wohl auch wie diese Lupenprogramme von der Mouseabfrage her). Imo muss dafuer kein Screenshot erstellt werden. Aber soweit solltest Du Dich imo schon selber erst mal durcharbeiten, damit Du dann konkret zur verwendeten Library/Funktion/Vorgehensweise fragen kannst - dann werden die Antworten auch konstruktiver ;)

Digedag
07-01-2007, 18:55
Danke erstmal für eure Antworten. :)

tradiaz' Ansätze haben mir erstmal weiter geholfen. Dennoch bin ich am verzweifeln.

Wie soll man mit XGetWindowAttributes das drawable bekommen?
Und was ist ein drawable überhaupt? Ein variabler Bildschirmbereich auf dem gezeichnet werden kann (also z.B. der Inhalt eines Fensters)? Wenn dem so ist, dann müßte es doch auch eine Art "root drawable", welches den ganzen Bildschirm umfasst, geben.

Außerdem weiss ich nicht was eine "plane mask" ist. Ich würde das mit "Flächenschablone" übersetzen, was für mich allerdings keinerlei Sinn ergibt.

"Display" würde ich mit "XOpenDisplay(NULL)" festlegen.

Ich bedanke mich für alle (weiteren) Antworten.