GTK Farbe für einen Pixel abfragen
-
Hallo,
ich möchte für Versuchszwecke von einem Pixel die Farbe abfragen.
Als Grundwerte hab ich z.B. eine Pixmap und die Koordinaten x und y. Das ganze soll unter GTK+ laufen. Eine Internetabfrage erbrachte mir keine verwertbaren Beispiele. Ansosten währe ich auch für Links dankbar.
Gruß, HansimGlück
-
Morgen,
da musst du einen kleinen Umweg machen. (Vorab, ich linke in die gtkmm-Doku, aber du findest die Methoden natürlich auch im GTK+ Toolkit, siehe dessen Doku)
Zuerst brauchst du das Drawable (die Grundlage für deine PixMap). Aus der Drawable rufst du dann get_image auf. Auf das Image kannst du dann Methoden wie put_pixel aufrufen, um ein pixel zu ändern.
Alternativ kannst du auch direkt auf den hinterlegten Datenstrukturen operieren, könnte allerdings unschön enden, wenn du nicht aufpasst.Cheers
GPC
-
Hallo, danke nochmal!
Zunächst bin ich davon ausgegangen, das Drawable und Pixmap nicht das gleiche ist. Ich hab ständig versucht diese zwei gegenseitig umzuwandeln, was aber quatsch war.
Hier nun eine Lösung, für alle, die das eventuell auch mal Suchen:
image=gdk_image_get(pixmap,0,0,win_x,win_y); test = gdk_image_get_pixel (image, posx1, posy1); g_print("Der Wert ist: %i\n",test);
Dabei ist win_x und win_y die Größe der Zeichenfläche. "test" wurde als guint32 definiert. "posx1" und "posy1" sind die Positionen, die getestet werden sollen.
Die Printanweisung, habe ich nur dazugemacht, damit ich sehe wie die einzelnen Werte aussehen.
Gruß HansimGlück
-
Hallo noch mal.
Die Funktion ist wirklich toll, hat aber dennoch ein kleines Problem. Es kostet sehr viel Zeit!
Hier wurde geschrieben:
Alternativ kannst du auch direkt auf den hinterlegten Datenstrukturen operieren, könnte allerdings unschön enden, wenn du nicht aufpasst.
Wie kann ich das machen? Muss halt dann aufpassen, obwohl ich nur eine Abfrage machen möchte.
Gruß HansimGlück
-
Hol dir das GdkPixbuf vom Image und operiere darauf...
Hier findest du ein Beispiel wie z.B. put_pixel implementiert ist. http://library.gnome.org/devel/gdk-pixbuf/stable/gdk-pixbuf-gdk-pixbuf.html#GdkPixbufIch befürchte allerdings, dass du die Performance kaum steigern wirst... in der Regel ist es besser, den eigenen Algorithmus zu optimieren. Und bist du dir sicher, dass get_pixel das Bottleneck ist?
-
Hallo,
na ja, sicher bin ich mir nicht.
Aber hier meine Befürchtung:
ich verwende diese Routine zum Füllen von Flächen in einer Farbe (siehe Beitrag http://www.c-plusplus.net/forum/viewtopic-var-t-is-219257.html). Meine Vermutung ist, da ich jedesmal ein Image erstellen muss (gdk_image_get) wird sehr viel Zeit verbraucht. Die Routine muss auch jedesmal dieses Image löschen, damit kein Speicherüberlauf entsteht. Ein einmaliges erstellen des Images bringt auch nichts, da beim setzen eines Pixels der Wert nicht im Image ist. Das PÜrogramm killt sich dann selbst, durch einen Stack Overfull.
Als ich eben dies schrieb, ist mir noch was aufgefallen!???? Kann ich auch direkt in das Image ein Pixel schreiben (denn dann müsste ich das Image nicht jedesmal neu erstellen) und kann ich anschliesend dieses Image wieder in die Pixmap legen???
Gruß HansimGlück
-
Na ja, mir fehlt jetzt langsam etwas das Wissen im Bereich Zeichnen mit GTK/GDK, da ich das nur sehr sporadisch gemacht habe. Aber grundsätzlich kannst du direkt das pixbuf vom image lesen/schreiben und somit auch direkt die pixel manipulieren.
Ansonsten würde ich erst sicherstellen, dass dies wirklich das Bottleneck ist, bevor du groß Zeit investierst.Cheers
GPC