Esiste un modo multipiattaforma per acquisire lo schermo in Google Go? O in ogni caso, ma la piattaforma incrociata sarebbe preferibile.Cattura lo schermo in Go?
risposta
Non riesco a trovare una libreria per farlo. L'acquisizione stabile dello schermo multipiattaforma richiede molto lavoro. La cattura dello schermo richiede l'interfacciamento con il display manager/server dei sistemi operativi o frame-buffer, che è diverso per molti sistemi operativi e distribuzioni Linux. Dovresti scrivere interfacce per ciascuna API del sistema operativo (o racchiudere le librerie che forniscono la funzionalità) e quindi astrarre tutti i diversi metodi in un unico pacchetto in modo che funzioni su più piattaforme.
Un altro modo per farlo sarebbe quello di eseguire un'applicazione di cattura dello schermo esistente (riga di comando) per eseguire il lavoro di cattura dello schermo, incluso il salvataggio in un file. Quindi leggi il file nella tua applicazione go. Per fare in modo che un'applicazione Go esegua un'applicazione di terze parti, usa il pacchetto os/exec, è nella libreria standard. Per Linux è possibile utilizzare fbgrab per salvare il frame-buffer in un file png.
Sfortunatamente, non esiste una libreria per farlo. Esistono un paio di associazioni per magickwand (linguaggio di programmazione C e le librerie di elaborazione immagini ImageMagick), vedere http://go-lang.cat-v.org/library-bindings ma queste sono incomplete e non hanno la funzione di cattura dello schermo.
Nel frattempo, come suggerito da GeertJohan, è possibile utilizzare os.exec per eseguire un programma esterno e acquisire lo schermo (vedere il codice di esempio riportato di seguito). Ad esempio, è possibile utilizzare import
comando da ImageMagick per bloccare lo schermo (dovrebbe funzionare su una piattaforma che può essere eseguito 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())
}
Non so di qualsiasi libreria multi-piattaforma, ma si può fare questo con il Libreria xgbutil quando è presente un server X. È possibile vedere un example of how to capture a screenshot here.
Se si desidera ottenere questo funzionamento su sistemi Mac/Windows, probabilmente inizierò esaminando la fonte per go.wde, che include i backend per Windows e Mac. Dubito che troverai direttamente il codice per catturare uno screenshot, ma potrebbe darti qualche suggerimento o un percorso da seguire.
Non esiste un modo multipiattaforma per acquisire lo schermo in Google's Go, perché lo schermo catturato si basa su una specifica API dei sistemi operativi sottostanti. Ma ci sono le librerie per Go che fanno questo.
Per esempio https://github.com/vova616/screenshot
È. Si tratta di una procedura in due passaggi:
Studio https://github.com/ShareX/ShareX/tree/master/ShareX.ScreenCaptureLib per vedere quale API win32 chiama per acquisire la schermata/finestra Tradurre quella logica su Vai. È possibile utilizzare uno dei pochi collegamenti win32 api Go esistenti (ad esempio https://github.com/AllenDang/w32). Se mancano funzionalità necessarie, è possibile aggiungere più wrapper.
Ora c'è:
https://github.com/vova616/screenshot
go get github.com/vova616/screenshot
Esempio:
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
}
Se avete bisogno di supporto MacOS così (fino a quando la richiesta di pull è fusa), ottiene:
C'è un'altra risposta con vova616/screenshot, ma non è stata veramente cross-platform a causa della mancanza di supporto per macOS. Ho recentemente implementato una soluzione nativa e spero che possa aiutare presto più sviluppatori! – Kesarion
- 1. Cattura dello schermo in Haskell?
- 2. Cattura dello schermo
- 3. HTML5 cattura dello schermo
- 4. Cattura lo schermo di iPhone con barra di stato inclusa?
- 5. cattura dello schermo usando DirectX
- 6. VBA WebBrowser cattura schermo intero
- 7. C# Cattura Direct 3D dello schermo
- 8. Android - Cattura schermo del telefono come film
- 9. Cattura schermo di display esterno su Android?
- 10. Previene la cattura dello schermo con DirectX
- 11. Simulazione Cattura dello schermo come webcam?
- 12. Cattura schermo iPhone per una vista
- 13. Prevenzione della cattura dello schermo in un'app per iOS
- 14. cattura lo screenshot in modalità emulatore di dispositivo chrome
- 15. Come ottenere una cattura dello schermo a doppia risoluzione?
- 16. twisted: cattura KeyboardInterrupt e lo spegnimento correttamente
- 17. Cattura rapidamente lo stack di chiamate
- 18. Cattura Eccezione, aggiungere dati, e rigenerare lo
- 19. come ottenere lo schermo funzionante in cygwin
- 20. Attiva automaticamente lo schermo in Android
- 21. Come cancellare lo schermo in pitone
- 22. Come ottenere lo schermo DPI in java?
- 23. in java per cancellare lo schermo
- 24. Android Converti lo schermo corrente in bitmap
- 25. Come disabilitare lo schermo in Commodore 64?
- 26. Come cancellare lo schermo in MySQL?
- 27. Eseguire lo script rubino in background senza utilizzare lo schermo
- 28. Cancellare lo schermo del terminale?
- 29. : come attivare lo schermo alternativo?
- 30. fare lo schermo iPhone Dim
Su stackoverflow.com, quando si ritiene che una risposta sia utile o risolva il problema, è necessario svenderlo (premere il triangolo in alto) o accettarlo (premere la levetta sotto il triangolo in basso). – rputikar