Commit f3b49f71 authored by santiaago's avatar santiaago
Browse files

add structure for random symetric images

parent 93e2bc14
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -17,10 +17,16 @@ func main() {
	r.HandleFunc("/green/?", greenHandler)
	r.HandleFunc("/blue/?", blueHandler)
	r.HandleFunc("/red/?", redHandler)

	r.HandleFunc("/grid/?", grid6X6Handler)
	r.HandleFunc("/grid/random/?", gridRandomHandler)
	r.HandleFunc("/grid/[0-8]?", gridColorHandler)

	r.HandleFunc("/grid/random/?", gridRandomHandler)
	r.HandleFunc("/grid/random/[0-8]/?", gridRandomColorHandler)

	r.HandleFunc("/grid/random/symetric?", gridRandomSymetricHandler)
	r.HandleFunc("/grid/random/symetric/[0-8]/?", gridRandomSymetricColorHandler)

	r.HandleFunc("/gradient/?", gradientHandler)

	r.AddStaticResource(root)
+55 −0
Original line number Diff line number Diff line
package main

import (
	"image"
	"image/color"
	"log"
	"net/http"
)

// handler for "/gird/random/symetric"
// generates a black and white grid random image.
func gridRandomSymetricHandler(w http.ResponseWriter, r *http.Request) {
	m := image.NewRGBA(image.Rect(0, 0, 240, 240))
	colorMap := MapOfColorPatterns()
	drawRandomSymetricGrid6X6(m, colorMap[0][0], colorMap[0][1])
	var img image.Image = m
	writeImage(w, &img)
}

// handler for "/grid/random/symetric[0-9]"
// generates a grid random image with a specific color based on the colorMap
func gridRandomSymetricColorHandler(w http.ResponseWriter, r *http.Request) {
	intID, err := PermalinkID(r, 3)
	if err != nil {
		log.Printf("error when extracting permalink id: %v", err)
	} else {
		m := image.NewRGBA(image.Rect(0, 0, 240, 240))
		colorMap := MapOfColorPatterns()
		drawRandomGrid6X6(m, colorMap[int(intID)][0], colorMap[int(intID)][1])
		var img image.Image = m
		writeImage(w, &img)
	}
}

// drawRandomGrid6X6 builds a grid image with with 2 colors selected at random for each quadrant.
func drawRandomSymetricGrid6X6(m *image.RGBA, color1, color2 color.RGBA) {
	size := m.Bounds().Size()
	quad := size.X / 6
	colorMap := make(map[int]color.RGBA)
	var currentQuadrand = 0
	for x := 0; x < size.X; x++ {
		if x/quad != currentQuadrand {
			// when x quadrant changes, clear map
			colorMap = make(map[int]color.RGBA)
			currentQuadrand = x / quad
		}
		for y := 0; y < size.Y; y++ {
			yQuadrant := y / quad
			if _, ok := colorMap[yQuadrant]; !ok {
				colorMap[yQuadrant] = getRandomColor(color1, color2)
			}
			m.Set(x, y, colorMap[yQuadrant])
		}
	}
}