Domanda

Voglio prendere il colore di un pixel con coordinate note sul mio desktop Linux.

Fino ad ora ho usato " import -window SomeWindow -crop 1x1 + X + Y /tmp/grab.jpg" quindi estraendo il valore di pixel usando Python e PIL .

Questo fa il suo lavoro, ma poiché l'importazione prende l'intera finestra prima del ritaglio, è molto lenta :(

Esiste un modo intelligente per catturare il colore di un solo pixel? Conosco entrambe le coordinate relative (finestra) e assolute.

Sarebbe preferibile uno script Python o shell, ma se conosci qualche C / X11 funzioni, per favore fatemi sapere :)

È stato utile?

Soluzione

Questo è il trucco, ma richiede python-gtk:

import gtk.gdk
import sys

def PixelAt(x, y):
    w = gtk.gdk.get_default_root_window()
    sz = w.get_size()
    pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
    pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
    pixel_array = pb.get_pixels_array()
    return pixel_array[y][x]

print PixelAt(int(sys.argv[1]), int(sys.argv[2]))

Su Ubuntu 9.10, questo richiede anche python-numpy o segfault l'interprete python sulla linea get_pixels_array . Ubuntu 10.04 ha ancora questo requisito o causa un ImportError relativo a numpy.core.multiarray.

scroll top