Narzędzie do łatwego wybierania piksela na ekranie oraz uzyskiwania kolorów i współrzędnych bezwzględnych

18

Szukam narzędzia, które pozwoli mi wybrać dowolny piksel na ekranie i uzyskać jego kolor RGB oraz położenie bezwzględne (x, y).

Użyłem narzędzi w systemie Windows, które pokazują duży powiększony kwadrat z krzyżykiem, co pozwala mi łatwo wybrać piksel, który chcę i uzyskać jego szczegóły.

Czy jest coś takiego dla Ubuntu?

Lampa błyskowa
źródło
tylko ciekawe, dlaczego razem szukacie tej konkretnej kombinacji ... która może pomóc nam wymyślić odpowiedź. dlaczego chcesz poznać współrzędne x, y i kolor?
snowguy,
Piszę narzędzie do automatyzacji, które wysyła dane z klawiatury i myszy w odpowiedzi na pewne rzeczy na ekranie. Niektóre części zależą od użycia przesunięć x, y niektórych przycisków itp. W oknie i chciałbym w łatwy sposób dokładnie znaleźć te przesunięcia.
Flash
Jeśli dotyczy to Internetu, a ty jesteś Firefoksem, istnieje rozszerzenie o nazwie ColorZilla. colorzilla.com/firefox
Anonimowy
Andrew, wygląda na to, że Ian B napisał narzędzie, które robi dokładnie to, co chcesz. Wygląda na to, że zasługuje na nagrodę.
snowguy

Odpowiedzi:

4

Najlepsze dopasowanie to ... małe narzędzie Windows o nazwie ColorPix (przez WINE)

Po długim i trudnym wyszukiwaniu wydaje się, że żadne z dostępnych narzędzi dla systemu Ubuntu / Linux nie spełnia obu kryteriów, tj. Powiększenia i wyświetlania współrzędnych .

Dlatego wybieramy małe narzędzie Windows, które - co krytyczne - działa tylko z domyślną instalacją WINE, bez potrzeby konfiguracji, instalacji, bibliotek DLL itp.

  • Posiada regulowany zoom, kopiowanie jednym kliknięciem w wielu formatach i wyświetlanie współrzędnych:

    wprowadź opis zdjęcia tutaj

1. Zainstaluj Wine

sudo apt-get install wine

(Otóż to!)

2. Pobierz ColorPix

ColorPix można oficjalnie pobrać tutaj jako mały, przenośny plik exe o wielkości 600 KB

Sugeruję pobranie bezpośrednio do lokalnego katalogu binarnego za pomocą:

sudo wget -O/usr/local/bin/ColorPix.exe http://www.colorschemer.com/ColorPix.exe

3. Utwórz program uruchamiający dla ColorPix

  • Najpierw zdobądźmy ikonę:

    sudo wget -O/usr/share/icons/colorpix.png http://cdn.alternativeto.net/i/22e49edc-efa7-e011-979d-0025902c7e73_11865.png
    
  • Naciśnij Alt+F2teraz i wpisz gksudo gedit /usr/share/applications/colorpix.desktop, wklej poniżej i zapisz plik:

    [Wpis na pulpicie]
    Nazwa = ColorPix
    GenericName = ColorPix
    Komentarz = ColorPicker przez WINE
    Exec = wine /usr/local/bin/ColorPix.exe
    Terminal = false
    Ikona = / usr / share / icons / colorpix.png
    Typ = zastosowanie
    StartupNotify = true
    
  • Z terminala uruchom:

    sudo chmod +x /usr/share/applications/colorpix.desktop
    
  • Za kilka sekund będzie dostępny w programie uruchamiającym jako:

    wprowadź opis zdjęcia tutaj

4. Korzystanie z ColorPix

Uruchom go i po raz pierwszy może potrwać kilka sekund podczas inicjowania WINE.

Poniższy zrzut ekranu pokazuje, jak działa:

  • Współrzędne na górze
  • Wartości kolorów w różnych formatach poniżej (kliknij, aby skopiować do schowka)
  • Regulowana lupa poniżej
  • Naciśnij dowolny klawisz, gdy znajdziesz się na żądanym pikselu, aby zablokować wartości

    wprowadź opis zdjęcia tutaj

ish
źródło
Dobrze napisana, zaskakująca odpowiedź - dzięki! Ale trudno jest znieść 625 MB do pobrania na wino, więc mam nadzieję, że Ian B otrzyma pomoc z jego uroczej małej aplikacji python ....
nealmcb
Wystarczy użyć xmag, jak opisano poniżej, i przytrzymać przycisk myszy na pikselu, którego współrzędne mają być.
hackerb9,
12

Istnieje narzędzie o nazwie gpick .

Tutaj możesz zobaczyć obraz narzędzia. Za pomocą gpick możesz wybierać piksele, widzieć kod HTML, dodawać kolory do palety i generować kolory.

Aby go użyć, kliknij prawym przyciskiem myszy środek sześciokąta, a następnie użyj spacji, aby zapisać kolory w palecie.

gpick

slashcrack
źródło
Dzięki temu prawie robi to, co chcę, ale nie wydaje się pokazywać współrzędnych pikseli.
Błysk
Czy możesz również oznaczyć to pytanie jako ukończone?
slashcrack
Nie - ponieważ wciąż nie mam odpowiedzi :)
Flash
gpick wygląda świetnie, po prostu zrób to, sudo apt-get install gpickaby go zainstalować
Bloke
6

To da ci to, co chcesz. Wierzę. Wprawdzie to kilka kroków, ale wygląda gorzej niż odkąd pokazałem każdy krok.

Ustawiać

Zainstaluj ImageMagick & Shutter.

sudo apt-get install imagemagick shutter

Jak uzyskać współrzędne x, y i kolor

A. Otwórz Migawkę i kliknij przycisk wyboru

zdjęcie kliknięcia przycisku wyboru

B. Zauważ, że kiedy poruszasz myszką, pokaże ci współrzędne x, y, których szukasz.

wprowadź opis zdjęcia tutaj

Kiedy znajdziesz właściwe miejsce, kliknij przycisk myszy i narysuj kwadrat, aby zrobić zdjęcie. (Tak naprawdę nie ma znaczenia, jak duży jest twój obraz, o ile go uruchomisz (lewy górny róg) na interesującym pikselu.)

wprowadź opis zdjęcia tutaj

C. Zamknij obraz w migawce

wprowadź opis zdjęcia tutaj

D. Uruchom następujące polecenie z terminala. To da ci wartości kolorów lewego górnego piksela.

convert ~/Pictures/Selection_001.png -crop 1x1+1+1 txt:- | sed -n 's/.* \(#.*\)/\1/p' 

E. W wierszu polecenia idź dalej i usuń zdjęcie, aby przy następnym zdjęciu migawki nadało mu tę samą nazwę. (W przeciwnym razie musisz zmienić nazwę w poprzednim kroku (D).

rm ~/Pictures/Selection_001.png
snowguy
źródło
Konwersja jest oczywiście najlepszą opcją, ale wolałbym wybrać rgba+ od: askubuntu.com/a/874503/52975
Ciro Santilli 事件 改造 中心 法轮功 六四 事件
6

Wklej ten kod do edytora tekstu, spraw, aby był wykonywalny i uruchom go. Po wybraniu koloru kroplomierzem u góry pojawią się współrzędne xiy.

Edycja : Napisałem kod, aby dodać okno powiększenia. Aby pobrać piksele poza oknem, kliknij przycisk (nie kroplomierz). Kliknij przycisk ponownie, aby zatrzymać chwytanie wskaźnika. Nie wymyśliłem, jak narysować celownik za pomocą Cairo, ale prawdopodobnie możesz go używać w obecnej postaci. Zostawiłem tam kod Cairo na wypadek, gdyby ktoś mógł mi powiedzieć, dlaczego mój prostokąt nie rysuje…

#!/usr/bin/python
from gi.repository import Gtk,Gdk, GdkPixbuf
import cairo

class picker(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect('delete-event', Gtk.main_quit)
        self.connect('motion-notify-event', self.motion_cb)
        self.connect('button-press-event',self.button_press)
        box=Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)

        #Setup area for coordinates and zoom window
        coordbox=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.xcoor=Gtk.Label("x: ")
        coordbox.pack_start(self.xcoor, True, False, 1)
        self.ycoor=Gtk.Label("y: ")
        coordbox.pack_start(self.ycoor, True, False, 1)
        self.zoomwin=Gtk.Image()
        #Trying to draw on Gtk.Image with cairo for crosshairs... Not working
        self.zoomwin.connect('draw', self.draw) 
        self.zoomwin.set_app_paintable(True)
        coordbox.pack_start(self.zoomwin,True,True,1)
        self.buttongo=Gtk.Button("Pick Color")
        self.buttongo.connect('clicked',self.gobutton_activate)
        coordbox.pack_start(self.buttongo,True,True,1)
        box.pack_start(coordbox, True, False, 5)

        #Put in color wheel for tweaking color
        self.cp=Gtk.ColorSelection()
        self.cp.connect('color-changed', self.on_color_changed)
        box.pack_start(self.cp, True, True, 5)
        self.add(box)
        self.show_all()

        #Set some initial parameters
        self.w,self.h=10,10 #Size of zoomed image in pixels
        self.count=0
        self.window=self.get_window()
        #set initial zoom image
        self.zoomwin.set_from_pixbuf(self.get_image().scale_simple(240,240,GdkPixbuf.InterpType.TILES))
        self.grabbing=False

    def on_color_changed(self,widget=None, data=None):
        #Print out x,y to widgets
        display=Gdk.Display.get_default()
        (screen,x,y,modifier)=display.get_pointer()
        self.xcoor.set_text("x: %i" %x)
        self.ycoor.set_text("y: %i" %y)


    def get_image(self,w=None,h=None):
        #Get a pixbuff image under pointer
        if w==None: w=self.w
        if h==None: h=self.h
        display=Gdk.Display.get_default()
        (screen,self.x,self.y,modifier)=display.get_pointer()
        window=Gdk.get_default_root_window()
        screenshot = Gdk.pixbuf_get_from_window(window,
            self.x-int(w/2), self.y-int(h/2), int(w), int(h))
        return screenshot

    def motion_cb(self, widget, data):
        #What to do while mouse pointer is moving
        #DONT capture every event! Causes too much backup
        if self.count==5:
            self.pixbuf=self.get_image().scale_simple(240,240,GdkPixbuf.InterpType.TILES)
            self.zoomwin.set_from_pixbuf(self.pixbuf)
            self.zoomwin.queue_draw()
            self.count=0
        self.count+=1

    def grab_start(self):
        #Grab control of pointer outside of window
        self.grabbing = True
        Gdk.pointer_grab(self.window, 
                        True, #allow passage of pointer events to children
                        Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK,
                        None,
                        None,# could put a custom cursor here
                        0L)

    def button_press(self,widget,data):
        #capture color under the pointer and set the color selection
        cenpx=self.get_image(1,1)
        color=tuple(map(ord, cenpx.get_pixels()[:3]))
        col=Gdk.RGBA(float(color[0])/256.,float(color[1])/256.,float(color[2])/256.)
        self.cp.set_current_rgba(col)

    def grab_stop(self):
        #Stop Grabbing the pointer
        Gdk.pointer_ungrab(0)
        self.grabbing=False     

    def gobutton_activate(self, widget, data=None):
        #Button control
        if self.grabbing==False:
            self.grab_start()
            widget.set_label("Stop Picking")
        else:
            self.grab_stop()
            widget.set_label("Pick Color")

    def draw(self, widget, cr):
        #this gets called, but nothing is drawn that I can see...
        cr.set_operator(cairo.OPERATOR_SOURCE)
        cr.set_source_rgba(1,1,1,1)
        w = self.w
        h = self.h
        cr.set_source_rgba(1,1,1,1)
        cr.set_line_width(10)
        cr.rectangle(w/2-1,h/2-1,w/2+1,h/2+1)
        cr.stroke()
        cr.set_operator(cairo.OPERATOR_OVER)


if __name__=="__main__":
    win=picker()
    Gtk.main()
Ian B.
źródło
1
Niezła odpowiedź. O wiele bardziej proste.
snowguy
1
Mam działa - ale nie widzę piksela, który zamierzam wybrać, dopóki go nie kliknę. Miałem nadzieję, że będę w stanie powiększyć obszar wokół kursora, aby mieć pewność, że otrzymam dokładnie właściwy piksel.
Flash
Wypróbuj teraz ... Ciekawy projekt i wiele się nauczyłem. Mam nadzieję, że ktoś może mi pomóc dowiedzieć się, dlaczego nie mogę rysować w oknie powiększenia za pomocą Cairo.
Ian B.,
4

Jeśli ktoś chce to zrobić w przyszłości, nie trzeba niczego pobierać (z pewnością nie setek megabajtów plików Windows, jak sugeruje inna odpowiedź). Prostym rozwiązaniem, które oferuje Ubuntu, jest xmag. Xmag jest częścią pakietu x11-apps, który powinien być już domyślnie zainstalowany.

To jest łatwe. Uruchom xmag, kliknij, aby wybrać region ekranu, a następnie przytrzymaj przycisk myszy w powiększonym widoku, aby zobaczyć dokładne współrzędne pikseli.

Zrzut ekranu z Xmag, Sans Pointer

Możesz przeczytać instrukcję xmag, pisząc man xmag.

hackerb9
źródło
Aby zmienić powiększenie, użyj -magopcji (domyślnie 5), np. Powiększ xmag -mag 10je dziesięć razy.
deser