new rgbsplit

This commit is contained in:
Norwin Roosen 2021-01-01 06:29:14 +01:00
parent 3ac85ca3f0
commit a9900d7b43
No known key found for this signature in database
GPG Key ID: 24BC059DE24C43A3
2 changed files with 28 additions and 9 deletions

View File

@ -3,7 +3,6 @@ package pixelflut
import ( import (
"fmt" "fmt"
"image" "image"
"image/color"
"sync" "sync"
"time" "time"
@ -115,14 +114,15 @@ func Flut(t FlutTask, stop chan bool, wg *sync.WaitGroup) {
func generateCommands(t FlutTask) (cmds commands) { func generateCommands(t FlutTask) (cmds commands) {
if t.RGBSplit { if t.RGBSplit {
white := color.NRGBA{0xff, 0xff, 0xff, 0xff} r, g, b := render.ImgRGBSplit(t.Img, 10)
imgmod := render.ImgColorFilter(t.Img, white, color.NRGBA{0xff, 0, 0, 0xff}) cmds = append(cmds, commandsFromImage(r, t.RenderOrder, t.Offset)...)
cmds = append(cmds, commandsFromImage(imgmod, t.RenderOrder, t.Offset.Add(image.Pt(-10, -10)))...) cmds = append(cmds, commandsFromImage(g, t.RenderOrder, t.Offset)...)
imgmod = render.ImgColorFilter(t.Img, white, color.NRGBA{0, 0xff, 0, 0xff}) cmds = append(cmds, commandsFromImage(b, t.RenderOrder, t.Offset)...)
cmds = append(cmds, commandsFromImage(imgmod, t.RenderOrder, t.Offset.Add(image.Pt(10, 0)))...) if t.RenderOrder == Shuffle {
imgmod = render.ImgColorFilter(t.Img, white, color.NRGBA{0, 0, 0xff, 0xff}) cmds.Shuffle()
cmds = append(cmds, commandsFromImage(imgmod, t.RenderOrder, t.Offset.Add(image.Pt(-10, 10)))...)
} }
} else {
cmds = append(cmds, commandsFromImage(t.Img, t.RenderOrder, t.Offset)...) cmds = append(cmds, commandsFromImage(t.Img, t.RenderOrder, t.Offset)...)
}
return return
} }

View File

@ -63,6 +63,25 @@ func ImgColorFilter(img *image.NRGBA, from, to color.NRGBA) *image.NRGBA {
return r return r
} }
// ImgRGBSplit returns three images containing the RGB components, optionally shifted by some offset
func ImgRGBSplit(img *image.NRGBA, shift int) (*image.NRGBA, *image.NRGBA, *image.NRGBA) {
bounds := img.Bounds().Inset(-shift)
r := image.NewNRGBA(bounds)
g := image.NewNRGBA(bounds)
b := image.NewNRGBA(bounds)
for x := bounds.Min.X; x < bounds.Max.X; x++ {
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
c := img.At(x, y).(color.NRGBA)
if c.A != 0 {
r.Set(x-shift, y-shift, color.NRGBA{R: c.R, A: c.A / 3})
g.Set(x+shift, y, color.NRGBA{G: c.G, A: c.A / 3})
b.Set(x-shift, y+shift, color.NRGBA{B: c.B, A: c.A / 3})
}
}
}
return r, g, b
}
func ScaleImage(img image.Image, factor int) (scaled *image.NRGBA) { func ScaleImage(img image.Image, factor int) (scaled *image.NRGBA) {
b := img.Bounds() b := img.Bounds()
scaledBounds := image.Rect(0, 0, b.Max.X*factor, b.Max.Y*factor) scaledBounds := image.Rect(0, 0, b.Max.X*factor, b.Max.Y*factor)