2012-12-09 23 views
8

Czy istnieje sposób na wielu platformach przechwytywania ekranu w Google Go? Lub w jakikolwiek sposób, ale preferowana byłaby platforma.Przechwyć ekran w trybie Go?

+0

Na stackoverflow.com, gdy myślisz, że jakaś odpowiedź jest pomocna lub rozwiązuje twój problem, powinieneś go upomnieć (naciśnij trójkąt w górę) lub zaakceptuj (naciśnij patyk pod trójkątem w dół). – rputikar

Odpowiedz

0

Nie mogę znaleźć biblioteki, aby to zrobić. Stabilne przechwytywanie wielu platform wymaga wiele pracy. Przechwytywanie ekranu wymaga współpracy z menedżerem wyświetlania/serwerem systemu operacyjnego lub ramką-buforem, co jest inne w przypadku wielu systemów operacyjnych i dystrybucji systemu Linux. Trzeba by napisać interfejsy dla każdego interfejsu API systemu operacyjnego (lub owijać biblioteki, które zapewniają tę funkcjonalność), a następnie zintensyfikować wszystkie różne metody w jednym pakiecie, aby działał on na wielu platformach.

Innym sposobem wykonania tej czynności jest uruchomienie istniejącej aplikacji do przechwytywania ekranu (wiersza polecenia), aby wykonać zrzut ekranu dla ciebie, w tym zapisanie do pliku. Następnie przeczytaj plik w aplikacji do pracy. Aby aplikacja Go uruchomiła aplikację innej firmy, użyj pakietu os/exec, który znajduje się w standardowej bibliotece. W systemie Linux można użyć fbgrab, aby zapisać bufor ramki do pliku PNG.

5

Niestety, nie ma w tym żadnej biblioteki. Istnieje kilka powiązań dla magickwand (język programowania C i biblioteki przetwarzania obrazu ImageMagick), patrz http://go-lang.cat-v.org/library-bindings, ale są one niekompletne i nie mają funkcji przechwytywania ekranu.

Tymczasem, jak zasugerował GeertJohan, możesz użyć os.exec do uruchomienia zewnętrznego programu i przechwycenia ekranu (patrz przykładowy kod poniżej). Na przykład, można użyć polecenia import z ImageMagick do przechwytywania ekranu (powinno działać na platformie, które można uruchomić ImageMagick)

package main 

import (
    "bytes" 
    "fmt" 
    "log" 
    "os/exec" 
) 

func main() { 

    var buf bytes.Buffer 

    path, err := exec.LookPath("import") 
    if err != nil { 
     log.Fatal("import not installed !") 
    } 
    fmt.Printf("import is available at %s\n", path) 

    cmd := exec.Command("import", "-window", "root", "root.png") 

    cmd.Stdout = &buf 
    cmd.Stderr = &buf 

    err = cmd.Run() 
    if err != nil { 
     panic(err) 
    } 
    fmt.Println(buf.String()) 
} 
1

nie wiem o wszelkich biblioteki cross-platform, ale można to zrobić z Biblioteka xgbutil, gdy obecny jest serwer X. Możesz zobaczyć example of how to capture a screenshot here.

Jeśli chciałbyś, żeby to działało na systemach Mac/Windows, prawdopodobnie zacznę od sprawdzenia źródła dla go.wde, które zawiera serwery dla systemów Windows i Mac. Wątpię, czy znajdziesz bezpośrednio kod do przechwycenia zrzutu ekranu, ale może to dać ci wskazówki lub ścieżkę do naśladowania.

1

Nie ma wieloplatformowym sposób do przechwytywania ekranu w Google Go, ponieważ opiera się na ekran uchwycenie konkretnego API bazowych systemów operacyjnych. Ale są I biblioteki dla Go, które to robią.

Na przykład https://github.com/vova616/screenshot

3

Teraz jest:

https://github.com/vova616/screenshot

go get github.com/vova616/screenshot

Przykład:

package main 

import "github.com/vova616/screenshot" 

func main() { 
    img, err := screenshot.CaptureScreen() // *image.RGBA 
    myImg := image.Image(img) // can cast to image.Image, but not necessary 
} 

Jeśli potrzebujesz wsparcia MacOS, jak również (aż prośba przyciąganie jest połączone), otrzymujemy:

https://github.com/kesarion/screenshot

+0

Istnieje inna odpowiedź z vova616/screenshot, ale nie była to prawdziwie wieloplatformowa ze względu na brak wsparcia dla macOS. Niedawno wdrożyłem natywne rozwiązanie i mam nadzieję, że wkrótce będzie pomagało większej liczbie programistów! – Kesarion

Powiązane problemy