diff options
Diffstat (limited to 'lines/num.go')
-rw-r--r-- | lines/num.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lines/num.go b/lines/num.go new file mode 100644 index 0000000..40becd0 --- /dev/null +++ b/lines/num.go @@ -0,0 +1,69 @@ +package lines + +import ( + "fmt" + "image" + "image/color" + "image/draw" + + "golang.org/x/image/font" + "golang.org/x/image/font/basicfont" + "golang.org/x/image/math/fixed" +) + +const padding = 30 + +type xAndYAxis struct { + img *image.RGBA + size int +} + +func newXAndYAxis(size int) *xAndYAxis { + imageRGBA := image.NewRGBA(image.Rect(0, 0, size+padding, size+padding)) + return &xAndYAxis{img: imageRGBA, size: size} +} + +func (p *xAndYAxis) drawXandY(s *image.RGBA) *image.RGBA { + draw.Draw(p.img, p.img.Bounds(), &image.Uniform{color.White}, image.Point{}, draw.Src) + r := image.Rectangle{image.Point{padding, 0}, p.img.Rect.Max} + draw.Draw(p.img, r, s, image.Point{0, 0}, draw.Src) + + p.vLine(padding-1, 0, s.Bounds().Max.Y) + p.hLine(padding-1, s.Bounds().Max.Y+1, p.img.Bounds().Max.X) + + px := int(p.size / sizesimpix) + ds := sizesimpix - 1 + for cx := 0; cx < sizesimpix; cx++ { + p.addTextTo(int(padding/3), int(((cx+1)*px)-(px/3)), fmt.Sprintf("%02d", ds)) + ds-- + } + + for cx := 0; cx < sizesimpix; cx++ { + p.addTextTo(int(cx*px+padding+(px/4)), int((p.img.Bounds().Max.Y)-padding/2), fmt.Sprintf("%02d", cx)) + } + + return p.img + +} + +func (p *xAndYAxis) hLine(x1, y, x2 int) { + for ; x1 <= x2; x1++ { + p.img.Set(x1, y, color.Gray16{0x0}) + } +} + +func (p *xAndYAxis) vLine(x, y1, y2 int) { + for ; y1 <= y2; y1++ { + p.img.Set(x, y1, color.Gray16{0x0}) + } +} + +func (p *xAndYAxis) addTextTo(x, y int, label string) { + d := &font.Drawer{Dst: p.img, + Src: image.NewUniform(color.Gray16{0x0}), + Face: basicfont.Face7x13, + Dot: fixed.Point26_6{X: fixed.I(x), Y: fixed.I(y)}, + } + + d.DrawString(label) +} |