53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
|
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
|
||
|
}
|