88 lines
2.4 KiB
C++
88 lines
2.4 KiB
C++
#include "BitVM.h"
|
|
|
|
typedef ImageData* Image;
|
|
|
|
//% color=45 weight=31
|
|
namespace images {
|
|
/**
|
|
* Creates an image that fits on the LED screen.
|
|
*/
|
|
//% weight=75 help=images/create-image
|
|
//% blockId=device_build_image block="create image"
|
|
Image createImage(ImageLiteral leds) {
|
|
return MicroBitImage(getbytes(leds)).clone().leakData();
|
|
}
|
|
|
|
/**
|
|
* Creates an image with 2 frames.
|
|
*/
|
|
//% weight=74 help=images/create-big-image
|
|
//% blockId=device_build_big_image block="create big image" imageLiteral=2
|
|
Image createBigImage(ImageLiteral leds) {
|
|
return createImage(leds);
|
|
}
|
|
}
|
|
|
|
namespace ImageMethods {
|
|
/**
|
|
* Shows an frame from the image at offset ``x offset``.
|
|
* @param xOffset TODO
|
|
*/
|
|
//% help=images/show-image weight=80 async
|
|
//% blockId=device_show_image_offset block="show image %sprite|at offset %offset" blockGap=8
|
|
void showImage(Image i, int xOffset = 0) {
|
|
uBit.display.print(MicroBitImage(i), -xOffset, 0, 0);
|
|
}
|
|
|
|
/**
|
|
* Scrolls an image .
|
|
* @param frameOffset x offset moved on each animation step, eg: 5, 1, -1
|
|
* @param interval time between each animation step in milli seconds, eg: 200
|
|
*/
|
|
//% help=images/show-image weight=79 async
|
|
//% blockId=device_scroll_image block="scroll image %sprite|with offset %frameoffset|and interval (ms) %delay" blockGap=8
|
|
void scrollImage(Image id, int frameOffset = 0, int interval = 200) {
|
|
MicroBitImage i(id);
|
|
if (i.getWidth() <= 5)
|
|
showImage(id, 0);
|
|
else
|
|
uBit.display.animate(i, interval, frameOffset, 0);
|
|
}
|
|
|
|
|
|
/**
|
|
* Plots the image at a given column to the screen
|
|
*/
|
|
//% help=images/plot-image
|
|
void plotImage(Image i, int xOffset = 0) {
|
|
uBit.display.print(MicroBitImage(i), -xOffset, 0, 0, 0);
|
|
}
|
|
|
|
/**
|
|
* Sets all pixels off.
|
|
*/
|
|
//% help=images/clear
|
|
void clear(Image i) {
|
|
MicroBitImage(i).clear();
|
|
}
|
|
|
|
/**
|
|
* Sets a specific pixel brightness at a given position
|
|
*/
|
|
//% help=
|
|
void setPixelBrightness(Image i, int x, int y, int value) {
|
|
MicroBitImage(i).setPixelValue(x, y, value);
|
|
}
|
|
|
|
|
|
/**
|
|
* Gets the pixel brightness ([0..255]) at a given position
|
|
*/
|
|
//% help=
|
|
int pixelBrightness(Image i, int x, int y) {
|
|
int pix = MicroBitImage(i).getPixelValue(x, y);
|
|
if (pix < 0) return 0;
|
|
return pix;
|
|
}
|
|
}
|