Ekran koordinatlarına göre pikselin rengini döndüren bir komut satırı aracı var mı?


11

Komut satırı aracı, yalnızca ekran koordinatlarına dayanarak bir pikselin renk değerini döndürür .

Böyle bir araç var mı?

(Ayrıca: Araç herhangi bir kullanıcı eylemi gerektirmemelidir. Bir komut dosyasında bir döngü içinde çalıştırmaktır.)


Yanıtlar:


14

Grabc programını kullanabilirsiniz . Fare işaretçinizi artı işaretine çevirir ve seçilen rengin HTML ve RGB değerlerini döndürür.

sudo apt-get install grabc

Dezavantajı: artı işaretinin yeterince ince olmaması nedeniyle piksel kesin seçimler yapmak mümkün değildir.


Ayrıca aşağıdaki gibi bir python betiği de oluşturabilirsiniz:

#!/usr/bin/python -W ignore::DeprecationWarning
import sys
import gtk

def get_pixel_rgb(x, y):
    pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 1, 1)
    pixbuf.get_from_drawable(gtk.gdk.get_default_root_window(),
                             gtk.gdk.colormap_get_system(), 
                             x, y, 0, 0, 1, 1)
    return pixbuf.get_pixels_array()[0][0]

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

çalıştırılabilir pixel_rgb="$(/path/to/script.py x y)"yapın ve bash komut dosyanızda çalıştırın . Elbette komut dosyasını ihtiyacınız olan şekilde değiştirmeniz, bazı hata işlemeleri vb. Eklemeniz gerekir.

PS: DeprecationWarning hakkında bir şey yapabileceğinizden tam olarak emin değilim, bu yüzden ilk satırda kapattım.


Teşekkürler htorque, ama yine çok önemli bir gereksinimi bıraktığımı çok geç fark ettim ... Bir toplu iş komut dosyasında bir döngüde bağımsız olarak çalışmasını istiyorum. Yani bu küçük app heads-up için teşekkürler. Kesinlikle bir süre kullanışlı gelecektir .. (ama "insansız" çalışacağı mevcut dikiş için değil)
Peter.O

htorque: Python betiğiniz benim değiştirilmiş özellikleri (tipik kullanıcı! her zaman özellikleri değiştirme! :) için tasarıyı mükemmel uyuyor Koordinatlarda doğrudan çalışmak benim "piksel deseni bulmak" proc için çok daha iyi ... ve sonra sadece imleci yeni bulunan eş-ords'a xmacro yapabilirim ve sonra xmacro'ya sağ tıklayabilirim; doğru hedef .... Kolay! (Pythonistas için :)
Peter.O

Başlarken no module named numpy.core.multiarray; Segmentation fault. Hangi parça bu modüle bağlıdır?
Drew Chapin

6

Bu biraz kurnaz, ancak bunu fareyle etkileşime girmenizi sağlayan xdotool ve ekranda tıklanan bir konumdan rengi alan grabc ile başarabilirsiniz.

sudo apt-get install xdotool grabc

İlk çalıştırmak grabc ama arka plan

grabc &

Sonra xdotool kullanarak bir fare tıklaması yapın

xdotool click 1

Tıklama grabc imleci ve renk çıktısı ile arka plan işlemi tarafından yakalanacaktır.


İlginç, misterben .. "cludgy" iyi olabilir;) Son zamanlarda bir söz duydum. "kara kedi, beyaz kedi, tekir kedi .. fareyi yakaladığı sürece" ... ama belirsiz bir şekilde makro aracının bilgi sayfasından birinde pikseller hakkında bir şeyler gördüğümü hatırlıyorum (ama belki sadece koordinatlarla ilgili idi) ... ekran boyunca bir piksel satırını sorgulamak istiyorum, ve grabc'nin neden olduğu imleç değişiminden kaçınmak istiyorum ... Şimdi "grabc" eylemini gördüğümde, kapmak için bir şey istiyorum koordinatları temel alan renk (bunu Windows'da sık sık yaptım :( ... Umarım Linux için benzer bir şey vardır :)
Peter.O

İşaretçi koordinatlarını almak ve htorque'ın python betiği ile kullanmak için xdotool kullanabilirsiniz. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'koordinatları yakalar ve bu betiğe beslemek için boşlukla ayrılmış xy değerlerine kadar temizler.
misterben

misterben, yardımlarınız için teşekkürler, backgrouding hakkında daha fazla şey öğrendim (çok kullanışlı) .... Soruyu ilk sorduğumda fark etmedim, ancak "koordinatları renklendir" yöntemi ortaya çıktı gitmenin yolu ol.
Peter.O

Ben sadece denemek için var xdtool getmouselocation... çok güzel, teşekkürler ... sed'in kullanışlılığı sadece şaşırtıcı beni devam ediyor!
Peter.O

3

Bulunan farklı bir çözümde, kullanılarak xwdve xdotool:

xwd -root -silent | convert xwd:- -depth 8 -crop "1x1+$X+$Y" txt:- | grep -om1 '#\w\+'

nerede $Xve $Ykoordinatlarınız.

Xorg'un bir parçası olarak xwdsisteminize önceden yüklenmiş olarak gelmelidir. xdotoolile kurulabilir:

sudo apt-get install xdotool 

@ Christian'ın StackOverflow Soru-Cevap ve bu imagemagick.org iş parçacığındaki cevabı temel alınmıştır .


Teşekkürler, htorque python komut dosyasından (gerçek 0.097s kullanıcı 0.072s sys 0.020s) çok daha yavaş olsa da (gerçek 0.363s kullanıcı 0.456s sys 0.064s) çalışıyor.
Peter.O

@ Peter.O Evet, ancak bu sadece python ve içe aktarılan kütüphaneler zaten belleğinizde önbelleğe alınmışsa geçerlidir. Soğuk bir başlangıçta python betiği önemli ölçüde yavaşlar. Eğer betiğiniz sadece ara sıra çalışıyorsa benim çözümümü kullanmak isteyebilirsiniz. Not: Hangi pencereyi incelemek istediğinizi biliyorsanız, işleri hızlandırabilirsiniz. xwdEğer pencere kimliği (örn sorgulamak böylece destekler, belirli pencere kimlikleri ekran görüntülerini alarak xdotool search --name "$Win" | head -n1) ve daha sonra onu geçmek xwdile xwd -id "$WinID" -silent | .... Not: Bu durumda koordinatlar pencereye görecelidir.
Glutanimate

2

Macropolo adında bu gibi işlemler için bir python modülü yazdım. Ancak, ekranda bir pikselin rengini almaktan çok daha fazla şey yapar.

İşte paylaştığım forum gönderisi: http://ubuntuforums.org/showthread.php?t=2155281

Modül, örneğin ekranın bir alanında belirli bir renge sahip piksel sayısını saymanıza, alanda piksel renk (ler) ini aramanıza, bir pikselin veya ekranın belirli bir alanının belirli bir alana sahip olmasını beklemenize izin veren birçok işleve sahiptir. renk, piksel rengini bekleyin ve beklerken başka bir işlev çalıştırın (örneğin, belirli bir rengi beklerken ekranın kapanmasına izin vermemek için imleci hareket ettirin).

Ancak, dediğim gibi, fare tıklamaları ve klavyeyi simüle etmek, ekranın ekran alanını almak ve daha fazlası gibi çok daha fazla şey yapıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.