package fb import ( "bufio" "fmt" "image" "image/color" "os" ) func Resolution() (w int, h int) { resFile, err := os.Open("/sys/class/graphics/fb0/virtual_size") if err != nil { panic(err) } r := bufio.NewReader(resFile) s, err := r.ReadString('\n') if err != nil { panic(err) } fmt.Sscanf(s, "%d,%d", &w, &h) return } var devfb *os.File var width, height = Resolution() func init() { var err error devfb, err = os.OpenFile("/dev/fb0", os.O_WRONLY, os.ModePerm) if err != nil { panic(err) } } func Bytes(c color.Color) []byte { r, g, b, a := c.RGBA() return []byte{byte(b), byte(g), byte(r), byte(a)} } func Draw(img image.Image) error { buf := bufio.NewWriterSize(devfb, 1<<16) for h := 0; h < height; h++ { for w := 0; w < width; w++ { _, err := buf.Write(Bytes(img.At(w, h))) if err != nil { return err } } } err := buf.Flush() if err != nil { return err } _, err = devfb.Seek(0,0) if err != nil { return err } return nil }