mirror of
https://github.com/zserge/fenster.git
synced 2025-08-02 14:57:32 +03:00
Less psychodelic image example; add some snow to TV screen, embed BG
image
This commit is contained in:
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
@ -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)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user