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?
Odpowiedz
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.
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())
}
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.
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
Jest. Jest to proces dwuetapowy:
Badanie https://github.com/ShareX/ShareX/tree/master/ShareX.ScreenCaptureLib, aby zobaczyć, które wywołania interfejsu API win32 wykonać w celu przechwycenia ekranu/okna. Przetłumacz tę logikę na Przejdź. Możesz użyć jednego z kilku istniejących wiązań Go ap32 dla Win32 (np. https://github.com/AllenDang/w32). Jeśli brakuje im potrzebnej funkcjonalności, możesz dodać dodatkowe opakowania.
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:
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
- 1. Ekran Przechwyć z CGDisplayStream
- 2. Jak wyśrodkować wyskakujący ekran w trybie szybkim
- 3. Przechwyć UIView jako UIImage
- 4. Przechwyć argument w Mockito
- 5. Uruchom ekran powitalny w trybie poziomym dla iPhone 5
- 6. Przechwyć hasło "Escape" w przeglądarce WebKit Browsers
- 7. Co to znaczy "Przechwyć mysz" w WPF?
- 8. Przechwyć wyślij formularz z jQuery
- 9. Jak pozorować/abstrakcyjny system plików w trybie go?
- 10. json parsowanie int64 w trybie go; wartości null
- 11. Jak zablokować/odblokować ekran w trybie Wzór/hasło w systemie Android?
- 12. Przechwyć klucz Enter Naciśnięty gdziekolwiek na stronie
- 13. Podwójny ekran stacji metra
- 14. Jak wznowić ekran (ekran GNU)
- 15. Przechwyć obraz, gdy urządzenie jest zablokowane hasłem
- 16. Przechwyć przychodzącą wiadomość SMS i zmodyfikuj ją
- 17. Przechwyć standardowe wyjście i nadal wyświetlaj je w oknie konsoli.
- 18. Przechwyć standardowe wyjście procesu z libuv
- 19. Przechwyć zapakowaną zawartość w stylu BeginForm w stylu pomocnika html
- 20. Przechwyć odpowiedź użytkownika podczas korzystania z window.onbeforeunload
- 21. Przechwyć multimedialne klucze ze strony internetowej?
- 22. Jak odświeżyć ekran w sposób ciągły i aktualizować go w czasie rzeczywistym?
- 23. YotubePlayerSupportFragment w trybie pełnoekranowym w trybie poziomym
- 24. Literały ósemkowe są niedozwolone w trybie ścisłym.
- 25. Dźwięk IOS przestaje być odtwarzany, gdy ekran zgaśnie w trybie szybkim.
- 26. Ekran Gnu w trybie powłoki emacs: jak naprawić kody ucieczki kolorów
- 27. Emitowany w trybie powłoki ekran jest zbyt szeroki po podzieleniu okna
- 28. Bezpieczne porównywanie ciągów w Go
- 29. Co to jest ekran "Wybierz ekran blokady"?
- 30. : jak włączyć alternatywny ekran?
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