Less psychodelic image example; add some snow to TV screen, embed BG

image
This commit is contained in:
Dimitri Sokolyuk
2023-01-16 19:19:47 +01:00
parent 1105389a9e
commit 5cbf91d822
2 changed files with 21 additions and 17 deletions

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -1,50 +1,54 @@
package main
import (
"bytes"
_ "embed"
"image"
"image/color/palette"
"image/color"
"image/draw"
"image/png"
"log"
"os"
"math/rand"
"time"
"github.com/zserge/fenster"
)
func openImage(fname string) (image.Image, error) {
fd, err := os.Open(fname)
if err != nil {
return nil, err
//go:embed Testbild.png
var testimage []byte
func randomMask(r image.Rectangle) image.Image {
img := image.NewAlpha(r)
for x := r.Min.X; x < r.Max.X; x++ {
for y := r.Min.Y; y < r.Max.Y; y++ {
if rand.Uint32()%64 == 0 {
img.Set(x, y, color.Opaque)
}
}
}
defer fd.Close()
return png.Decode(fd)
return img
}
func main() {
f, err := fenster.New(320, 240, "Hello")
f, err := fenster.New(320, 240, "TV")
if err != nil {
log.Fatal(err)
}
defer f.Close()
img, err := openImage("testdata/Testbild.png")
bg, err := png.Decode(bytes.NewBuffer(testimage))
if err != nil {
log.Fatal(err)
}
// convert to paletted image
pimg := image.NewPaletted(img.Bounds(), palette.Plan9)
draw.Draw(pimg, pimg.Bounds(), img, image.Point{}, draw.Src)
for f.Loop(time.Second / 24) {
// If escape is pressed - exit
if f.Key(27) {
break
}
// rotate palette
pimg.Palette = append(pimg.Palette[1:], pimg.Palette[0])
draw.Draw(f, f.Bounds(), pimg, image.Point{}, draw.Src)
draw.Draw(f, f.Bounds(), bg, image.Point{}, draw.Src)
snow := randomMask(f.Bounds())
draw.Draw(f, f.Bounds(), snow, image.Point{}, draw.Over)
}
}