La différence entre le flux de sortie de la console et le flux de fichiers multimédias est un concept important dans le développement de programmes. Le flux de sortie de la console est principalement utilisé pour générer des informations pendant l'exécution du programme sur la console afin de permettre aux développeurs de déboguer et d'afficher les résultats en cours d'exécution. Le flux de fichiers multimédias est utilisé pour lire et écrire des fichiers multimédias, tels que l'audio, la vidéo, etc. Il existe certaines différences dans les scénarios d'utilisation, de traitement des données et d'application entre les deux. Il est très important que les développeurs comprennent et maîtrisent ces différences. Nous explorerons ensuite en détail les différences et les conseils d’utilisation entre les deux.
J'ai du mal à essayer de restituer un GIF dans Go. Le fichier GIF de sortie ne peut pas être ouvert à l'aide d'une méthode, mais peut être ouvert normalement à l'aide d'une autre méthode. J'ai trouvé Rendering .gif dans Go mais cela n'a pas résolu mon problème spécifique.
Voici le code en question :
package main import ( "bufio" "fmt" "image" "image/color" "image/gif" "io" "math" "math/rand" "os" "time" ) var palette = []color.Color{color.White, color.Black} const ( whiteIndex = 0 blackIndex = 1 ) func main() { w := bufio.NewWriter(os.Stdout) lissajous(w) } func lissajous(out io.Writer) { const ( cycles = 5 res = 0.001 size = 100 nframes = 64 delay = 8 ) rand.Seed(time.Now().UTC().UnixNano()) freq := rand.Float64() * 3.0 anim := gif.GIF{LoopCount: nframes} phase := 0.0 for i := 0; i < nframes; i++ { rect := image.Rect(0, 0, 2 * size+1, 2 * size + 1) img := image.NewPaletted(rect, palette) for t := 0.0; t < cycles * 2 * math.Pi; t += res { x := math.Sin(t) y := math.Sin(t * freq + phase) img.SetColorIndex(size + int(x * size + 0.5), size + int(y * size + 0.5), blackIndex) } phase += 0.1 anim.Delay = append(anim.Delay, delay) anim.Image = append(anim.Image, img) } err := gif.EncodeAll(out, &anim) if err != nil { return } else { fmt.Println(err) } }
Voici les commandes :
go build main.go
main > out.gif
Ensuite, out.gif ne peut pas être ouvert. Mais cette méthode fonctionne très bien :
func main() { fileName := "out.gif" f, err3 := os.Create(fileName) if err3 != nil { fmt.Println("create file fail") } w := bufio.NewWriter(f) lissajous(w) w.Flush() f.Close() }
Je ne comprends pas pourquoi la première méthode ne crée pas un fichier GIF fonctionnel, alors que la deuxième méthode le fait. Est-ce lié à la façon dont Go gère l'écriture ou la mise en mémoire tampon des fichiers ?
Selon @CeriseLimón Remarque :
func main() { w := bufio.NewWriter(os.Stdout) lissajous(w) w.Flush() }
Expliquez la dernière question
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!