fenster/examples/testimage.go
Dimitri Sokolyuk c33b7ee0a2 Implement draw.Image
2023-01-14 22:15:27 +01:00

57 lines
1004 B
Go

package main
import (
"image"
"image/color/palette"
"image/draw"
"image/png"
"log"
"os"
"time"
"github.com/zserge/fenster"
)
func openImage(fname string) (image.Image, error) {
fd, err := os.Open(fname)
if err != nil {
return nil, err
}
defer fd.Close()
return png.Decode(fd)
}
func main() {
f := fenster.New()
f.Open(320, 240, "Hello")
defer f.Close()
lastFrame := time.Now()
img, err := openImage("testdata/Testbild.png")
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() {
// 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)
// Wait for FPS rate
sleep := 16*time.Millisecond - time.Since(lastFrame)
if sleep > 0 {
time.Sleep(sleep)
}
lastFrame = time.Now()
}
}