example2.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright (c) 2011 CZ.NIC z.s.p.o. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. // blame: jnml, labs.nic.cz
  5. // +build ignore
  6. package main
  7. import (
  8. "bytes"
  9. "github.com/cznic/mathutil"
  10. "image"
  11. "image/png"
  12. "io/ioutil"
  13. "log"
  14. "math"
  15. "math/rand"
  16. )
  17. // $ go run example2.go # view rand.png and rnd.png by your favorite pic viewer
  18. //
  19. // see http://www.boallen.com/random-numbers.html
  20. func main() {
  21. sqr := image.Rect(0, 0, 511, 511)
  22. r, err := mathutil.NewFC32(math.MinInt32, math.MaxInt32, true)
  23. if err != nil {
  24. log.Fatal("NewFC32", err)
  25. }
  26. img := image.NewGray(sqr)
  27. for y := 0; y < 512; y++ {
  28. for x := 0; x < 512; x++ {
  29. if r.Next()&1 != 0 {
  30. img.Set(x, y, image.White)
  31. }
  32. }
  33. }
  34. buf := bytes.NewBuffer(nil)
  35. if err := png.Encode(buf, img); err != nil {
  36. log.Fatal("Encode rnd.png ", err)
  37. }
  38. if err := ioutil.WriteFile("rnd.png", buf.Bytes(), 0666); err != nil {
  39. log.Fatal("ioutil.WriteFile/rnd.png ", err)
  40. }
  41. r2 := rand.New(rand.NewSource(0))
  42. img = image.NewGray(sqr)
  43. for y := 0; y < 512; y++ {
  44. for x := 0; x < 512; x++ {
  45. if r2.Int()&1 != 0 {
  46. img.Set(x, y, image.White)
  47. }
  48. }
  49. }
  50. buf = bytes.NewBuffer(nil)
  51. if err := png.Encode(buf, img); err != nil {
  52. log.Fatal("Encode rand.png ", err)
  53. }
  54. if err := ioutil.WriteFile("rand.png", buf.Bytes(), 0666); err != nil {
  55. log.Fatal("ioutil.WriteFile/rand.png ", err)
  56. }
  57. }