8
votes

Comment puis-je attraper la couleur d'un pixel sur mon bureau? (Linux)

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

Jusqu'à présent, j'ai utilisé "Import -Window quelque Windowow -crop 1x1 + x + y /tmp/grab.jpg" Ensuite, extraire la valeur de pixel à l'aide de Python et PIL .

Cela fait le travail, mais étant donné que l'importation attrape toute la fenêtre avant de recadrer, c'est très lent: (

Y a-t-il un moyen intelligent pour saisir la couleur d'un seul pixel? Je connais les deux relatives (fenêtre) et les coordonnées absolues.

Un script Python ou Shell serait préférable, mais si vous connaissez une intelligente C / x11 Fonctions, s'il vous plaît laissez-moi savoir :)


0 commentaires

4 Réponses :


8
votes

Cela fait l'affaire, mais nécessite Python-GTK: xxx

sur Ubuntu 9.10, cela nécessite également Python-Numpy ou SEGFault l'interpréteur de Python sur le get_pixels_array ligne. Ubuntu 10.04 Il a toujours cette exigence, ou cela provoque un importerror concernant Numpy.core.Multiarray.


4 commentaires

Est-ce que je remarque une lenteur, si je dois vérifier quelque 200 pixels par seconde?


Travaillé comme un charme! : D Si quelqu'un s'intéresse à un script qui saute Spotify publics, faites le moi savoir.


200 pix-Per-Per-Per-Second - Vous pouvez transmettre une liste des pixels pour vérifier et le retirer de la matrice de pixels. Devrait être ok-ish vitesse sage.


@Joernsn sauter des annonces Spotify? Oh bien, les temps ont changé ..: D



1
votes

Si vous utilisez KDE4, un widget de sélection 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


0 commentaires

3
votes

Voici une fonction beaucoup plus rapide basée sur richq em> 's Réponse .
Celui-ci lit seulement un pixel à partir de l'écran au lieu d'obtenir un énorme éventail de tous les pixels.

>>> pixel_at(25, 5)
(143, 178, 237)


0 commentaires

4
votes

Utilisation de gi.Repository GDK, il est encore plus petit 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]))))


0 commentaires