add funmode :^)

This commit is contained in:
Norwin Roosen 2020-02-15 13:58:01 +01:00
parent 470115a126
commit e4acdac3a5
4 changed files with 44 additions and 4 deletions

View File

@ -8,14 +8,31 @@ import (
"log"
"net"
"sync"
"github.com/SpeckiJ/Hochwasser/render"
)
var funmode = true
// Flut asynchronously sends the given image to pixelflut server at `address`
// using `conns` connections. Pixels are sent column wise, unless `shuffle`
// is set. Stops when stop is closed.
// @cleanup: use FlutTask{} as arg
func Flut(img *image.NRGBA, position image.Point, shuffle bool, address string, conns int, stop chan bool, wg *sync.WaitGroup) {
cmds := commandsFromImage(img, position)
var cmds commands
if funmode {
// do a RGB split of white
imgmod := render.ImgReplaceColors(img, color.NRGBA{0xff, 0xff, 0xff, 0xff}, color.NRGBA{0xff, 0, 0, 0xff})
cmds = append(cmds, commandsFromImage(imgmod, image.Pt(position.X-10, position.Y-10))...)
imgmod = render.ImgReplaceColors(img, color.NRGBA{0xff, 0xff, 0xff, 0xff}, color.NRGBA{0, 0xff, 0, 0xff})
cmds = append(cmds, commandsFromImage(imgmod, image.Pt(position.X+10, position.Y))...)
imgmod = render.ImgReplaceColors(img, color.NRGBA{0xff, 0xff, 0xff, 0xff}, color.NRGBA{0, 0, 0xff, 0xff})
cmds = append(cmds, commandsFromImage(imgmod, image.Pt(position.X-10, position.Y+10))...)
cmds = append(cmds, commandsFromImage(img, position)...)
} else {
cmds = commandsFromImage(img, position)
}
if shuffle {
cmds.Shuffle()
}

View File

@ -2,6 +2,7 @@ package render
import (
"image"
"image/color"
_ "image/gif" // register gif, jpeg, png format handlers
_ "image/jpeg"
"image/png"
@ -45,6 +46,19 @@ func ImgToNRGBA(img image.Image) *image.NRGBA {
return r
}
func ImgReplaceColors(img *image.NRGBA, from, to color.NRGBA) *image.NRGBA {
b := img.Bounds()
r := image.NewNRGBA(b)
for x := b.Min.X; x < b.Max.X; x++ {
for y := b.Min.Y; y < b.Max.Y; y++ {
if img.At(x, y) == from {
r.SetNRGBA(x, y, to)
}
}
}
return r
}
func ScaleImage(img image.Image, factor int) (scaled *image.NRGBA) {
b := img.Bounds()
scaledBounds := image.Rect(0, 0, b.Max.X*factor, b.Max.Y*factor)

View File

@ -17,7 +17,7 @@ func pt(p fixed.Point26_6) image.Point {
}
}
func RenderText(text string, scale int, col color.Color) *image.NRGBA {
func RenderText(text string, scale int, col, bgCol color.Color) *image.NRGBA {
// @incomplete: draw with texture via Drawer.Src
face := basicfont.Face7x13
stringBounds, _ := font.BoundString(face, text)
@ -25,7 +25,10 @@ func RenderText(text string, scale int, col color.Color) *image.NRGBA {
b := image.Rectangle{pt(stringBounds.Min), pt(stringBounds.Max)}
img := image.NewNRGBA(b)
draw.Draw(img, b, image.Black, image.Point{}, draw.Src) // fill with black bg
// fill with black bg
if (bgCol != color.NRGBA{}) {
draw.Draw(img, b, image.NewUniform(bgCol), image.Point{}, draw.Src)
}
d := font.Drawer{
Dst: img,

View File

@ -29,6 +29,7 @@ func RunREPL(f Fluter) {
mode := commandMode
textSize := 4
textCol := color.NRGBA{0xff, 0xff, 0xff, 0xff}
bgCol := color.NRGBA{}
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
@ -42,7 +43,7 @@ func RunREPL(f Fluter) {
continue
}
t := f.getTask()
t.Img = render.RenderText(inputStr, textSize, textCol)
t.Img = render.RenderText(inputStr, textSize, textCol, bgCol)
f.applyTask(t)
case commandMode:
@ -94,6 +95,11 @@ func RunREPL(f Fluter) {
textCol = color.NRGBA{col[0], col[1], col[2], 0xff}
}
}
if len(args) > 2 {
if col, err := hex.DecodeString(args[2]); err == nil {
bgCol = color.NRGBA{col[0], col[1], col[2], 0xff}
}
}
case "img":
if len(args) > 0 {