Question

Je souhaite saisir la couleur d'un pixel avec des coordonnées connues sur mon bureau Linux.

Jusqu'à présent, j'ai utilisé " import -window SomeWindow -crop 1x1 + X + Y /tmp/grab.jpg" puis extraire la valeur de pixel à l'aide de Python et PIL .

Cela fait l'affaire, mais comme l'importation saisit toute la fenêtre avant le rognage, elle est très lente: (

Existe-t-il un moyen intelligent d’acquérir la couleur d’un seul pixel? Je connais les coordonnées relatives (fenêtre) et absolues.

Un script Python ou shell serait préférable, mais si vous connaissez un astucieux C / X11 fonctions, également s'il vous plaît faites le moi savoir:)

Était-ce utile?

La solution

Cela fait l'affaire, mais nécessite 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]))

Sous Ubuntu 9.10, cela nécessite également python-numpy ou il sépare par défaut l'interpréteur python sur la ligne get_pixels_array . Ubuntu 10.04 a toujours cette exigence, ou provoque une erreur ImportError concernant numpy.core.multiarray.

Autres conseils

Voici une fonction beaucoup plus rapide basée sur la réponse de . .
Celui-ci lit seulement un pixel de l’écran au lieu d’obtenir un grand nombre de pixels.

import gtk.gdk

def pixel_at(x, y):
    rw = gtk.gdk.get_default_root_window()
    pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 1, 1)
    pixbuf = pixbuf.get_from_drawable(rw, rw.get_colormap(), x, y, 0, 0, 1, 1)
    return tuple(pixbuf.pixel_array[0, 0])
>>> pixel_at(25, 5)
(143, 178, 237)

Nécessite PyGTK, bien sûr ...

L’utilisation de gi.repository Gdk est encore plus petite et fonctionne sur Python 2 ou 3:

#!/usr/bin/python3
# Print RGB color values of screen pixel at location x, y
from gi.repository import Gdk
import sys

def PixelAt(x, y):
  w = Gdk.get_default_root_window()
  pb = Gdk.pixbuf_get_from_window(w, x, y, 1, 1)
  return pb.get_pixels()

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

Si vous utilisez KDE4, vous disposez d’un widget Sélecteur de couleurs que vous pouvez ajouter à votre panneau ou à votre bureau. Pour ajouter le widget soit faites un clic droit sur le bureau et choisissez Ajouter un widget OU faites un clic droit sur le panneau et choisissez Options du panneau > Ajouter des widgets

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top