La libreria standard Go non offre funzionalità di disegno o pittura primitive.
Ciò che fornisce sono i modelli per i colori (pacchetto image/color
) e un'interfaccia Image
con diverse implementazioni (pacchetto image
). Il post del blog The Go Image package è una buona introduzione a questo.
Fornisce inoltre la capacità di combinare le immagini (ad esempio disegnarle l'una sull'altra) con diverse operazioni nel pacchetto image/draw
. Questo può essere usato molto più di quanto possa sembrare all'inizio. C'è un bel articolo del blog sul pacchetto image/draw
che mette in mostra alcune delle sue potenzialità: The Go image/draw package
Un altro esempio è il gioco open-source Gopher's Labyrinth (divulgazione: Sono l'autore) che ha un interfaccia grafica e utilizza nient'altro solo la libreria standard di Go per assemblare la sua vista.
E 'open source, controlla le sue fonti come è fatto. Ha una visuale di gioco scorrevole con immagini/animazioni in movimento.
La libreria standard supporta anche la lettura e la scrittura di formati immagine più comuni come GIF, JPEG, PNG, e il supporto per altri formati sono disponibili fuori dalla scatola: BMP, RIFF, TIFF e anche WEBP (solo un lettore/decodificatore).
Sebbene il supporto non sia fornito dalla libreria standard, è abbastanza semplice disegnare linee e rettangoli su un'immagine. Data un'immagine img
che supporta cambiare un pixel con un metodo: Set(x, y int, c color.Color)
(per esempio image.RGBA
è perfetto per noi) e un col
di tipo color.Color
:
// HLine draws a horizontal line
func HLine(x1, y, x2 int) {
for ; x1 <= x2; x1++ {
img.Set(x1, y, col)
}
}
// VLine draws a veritcal line
func VLine(x, y1, y2 int) {
for ; y1 <= y2; y1++ {
img.Set(x, y1, col)
}
}
// Rect draws a rectangle utilizing HLine() and VLine()
func Rect(x1, y1, x2, y2 int) {
HLine(x1, y1, x2)
HLine(x1, y2, x2)
VLine(x1, y1, y2)
VLine(x2, y1, y2)
}
Usando queste semplici funzioni qui è un programma esempio eseguibile che disegna una linea e un rettangolo e salva l'immagine in un file .png
:
import (
"image"
"image/color"
"image/png"
"os"
)
var img = image.NewRGBA(image.Rect(0, 0, 100, 100))
var col color.Color
func main() {
col = color.RGBA{255, 0, 0, 255} // Red
HLine(10, 20, 80)
col = color.RGBA{0, 255, 0, 255} // Green
Rect(10, 10, 80, 50)
f, err := os.Create("draw.png")
if err != nil {
panic(err)
}
defer f.Close()
png.Encode(f, img)
}
Se si vuole disegnare testi, è possibile utilizzare il Go implementation of FreeType. Verificate anche questa domanda per una semplice introduzione a stringhe di disegno sulle immagini: How to add a simple text label to an image in Go?
Se si desidera utilizzare funzionalità avanzate e più complesse di disegno, ci sono anche many external libraries disponibili, ad esempio:
http://github.com/llgcode/draw2d/
Non ho provato questi, ma https://code.google.com/p/rog-go/source/browse/canvas/ e https://code.google.com/p/draw2d/ potrebbe aiutare . – twotwotwo
grazie guardato draw2d. scaricato ma ha incontrato un sacco di problemi di compilazione (sono su stack appengine). molto lavoro per iniziare. il caso peggiore proverà a risolverli. – Fakeer
lol chi era offensivo il requisito di tracciare una linea che la domanda è stata downvoted! – Fakeer