pixelqr/internal/qrgrid_to_ansimage.go

53 lines
1.1 KiB
Go
Raw Normal View History

2017-09-04 08:36:34 +00:00
package internal
import (
"github.com/eliukblau/pixterm/ansimage"
"github.com/qpliu/qrencode-go/qrencode"
)
func ConvertGridToANSImage(grid *qrencode.BitGrid) (s string, err error) {
// HACK - ansimage has an image offset bug which hides the first two rows
img, err := ansimage.New(2+2+((grid.Height()+1)/2)*2, 2+grid.Width())
if err != nil {
return
}
// white borders
for x := 0; x < 1+grid.Width()+1; x++ {
err = img.SetAt(2, x, 255, 255, 255)
if err != nil {
return
}
err = img.SetAt(2+grid.Height()+1, x, 255, 255, 255)
if err != nil {
return
}
}
for y := 1; y < grid.Height()+3; y++ {
err = img.SetAt(y, 0, 255, 255, 255)
if err != nil {
return
}
err = img.SetAt(y, grid.Width()+1, 255, 255, 255)
if err != nil {
return
}
}
for y := 0; y < grid.Height(); y++ {
for x := 0; x < grid.Width(); x++ {
val := uint8(0)
if !grid.Get(x, y) {
val = 255
}
// HACK - ansimage has an image offset bug which hides the first two rows
err = img.SetAt(y+3, x+1, val, val, val)
if err != nil {
return
}
}
}
s = img.Render()
return
}