Skip to content

Latest commit

 

History

History
 
 

image

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

tinygo.org/x/drivers/image

This is an image package that uses less RAM to run on a microcontroller. Unlike Go's original image package, image.Decode() does not return image.Image.

Instead, a callback can be set to process the data corresponding to the image.

How to use

First, use SetCallback() to set the callback. Then call png.Decode() or jpeg.Decode(). The callback will be called as many times as necessary to load the image.

SetCallback() needs to be given a Buffer to handle the callback and the actual function to be called. The data []uint16 in the callback is in RGB565 format.

The io.Reader to pass to Decode() specifies the binary data of the image.

func drawPng(display *ili9341.Device) error {
	p := strings.NewReader(pngImage)
	png.SetCallback(buffer[:], func(data []uint16, x, y, w, h, width, height int16) {
		err := display.DrawRGBBitmap(x, y, data[:w*h], w, h)
		if err != nil {
			errorMessage(fmt.Errorf("error drawPng: %s", err))
		}
	})

	return png.Decode(p)
}
func drawJpeg(display *ili9341.Device) error {
	p := strings.NewReader(jpegImage)
	jpeg.SetCallback(buffer[:], func(data []uint16, x, y, w, h, width, height int16) {
		err := display.DrawRGBBitmap(x, y, data[:w*h], w, h)
		if err != nil {
			errorMessage(fmt.Errorf("error drawJpeg: %s", err))
		}
	})

	return jpeg.Decode(p)
}

How to create an image

The following program will output an image binary like the one in images.go.

go run ./cmd/convert2bin ./path/to/png_or_jpg.png

Examples

An example can be found below. Processing jpegs requires a minimum of 32KB of RAM.