From 02944ee3dc07dde204a5462dae4757a23970a182 Mon Sep 17 00:00:00 2001 From: "Stephen M. McQuay" Date: Wed, 1 Aug 2012 09:13:46 -0600 Subject: [PATCH] Example of generating an image --- genimage/go.go | 28 ++++++++++++++++++++++++++++ pic/pic.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 genimage/go.go create mode 100644 pic/pic.go diff --git a/genimage/go.go b/genimage/go.go new file mode 100644 index 0000000..ec5d3c9 --- /dev/null +++ b/genimage/go.go @@ -0,0 +1,28 @@ +package main + +import ( + "learning/pic" + "flag" +) + +func Pic(dx, dy int) [][]uint8 { + result := make([][]uint8, dy) + for i := 0; i < dx; i++ { + result[i] = make([]uint8, dx) + } + var ii, jj uint8 + for i := 0; i < dy; i++ { + for j := 0; j < dy; j++ { + ii = uint8(i) + jj = uint8(j) + result[i][j] = ii ^ jj + } + } + return result +} + +func main() { + flag.Parse() + image := pic.CalculateImage(Pic) + pic.SaveImage(flag.Arg(0), image) +} diff --git a/pic/pic.go b/pic/pic.go new file mode 100644 index 0000000..d79ea08 --- /dev/null +++ b/pic/pic.go @@ -0,0 +1,43 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pic + +import ( + "bytes" + "image" + "image/png" + "log" + "os" +) + +func CalculateImage(f func(int, int) [][]uint8) image.Image { + const ( + dx = 256 + dy = 256 + ) + data := f(dx, dy) + m := image.NewNRGBA(image.Rect(0, 0, dx, dy)) + for y := 0; y < dy; y++ { + for x := 0; x < dx; x++ { + v := data[y][x] + i := y*m.Stride + x*4 + m.Pix[i] = v + m.Pix[i+1] = v + m.Pix[i+2] = 255 + m.Pix[i+3] = 255 + } + } + return m +} + +func SaveImage(filename string, m image.Image) { + var buf bytes.Buffer + png.Encode(&buf, m) + if outfile, err := os.Create(filename); err != nil { + log.Fatal(err) + } else { + buf.WriteTo(outfile) + } +}