Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed N5110 ShiftReg PinDetect
Diff: State.h
- Revision:
- 12:8178fad5e660
- Parent:
- 10:f2488a0ecab7
- Child:
- 13:7ab71c7c311b
--- a/State.h Fri May 08 22:10:54 2015 +0000 +++ b/State.h Fri May 08 23:51:26 2015 +0000 @@ -43,7 +43,23 @@ /** Draws an image to the lcd * @param img Array with the same size as the display, where 1 is opaque, 0 is blank. */ - void drawImage(const int img[BANKS][WIDTH]); // Draws an image from array + //void drawImage(const int img[BANKS][WIDTH]); // Draws an image from array + + + /** Draws an image/sprite to the lcd + * @param img const int array where a solid pixel equals 1, and a blank pixel equals zero + * @param x Horizontal position of image (leftmost pixel) + * @param y Vertical position of image (uppermost pixel) + * See seperate program for how this array can be generated from an image file using SFML! + */ + template<size_t rows, size_t cols> + void drawImage(const int (&img)[rows][cols], int x, int y); + + /** Draws an image/sprite to the lcd with origin in upper-left corner of the lcd + * @param img Array where 1 corresponds to opaque and 0 corresponds to blank + */ + template <size_t rows, size_t cols> + void drawImage(const int (&img)[rows][cols]) { drawImage(img, 0, 0); } protected: N5110 *lcd; @@ -54,4 +70,27 @@ }; +// Template functions needs to be declared in the header file +// TODO: Add functions for inverse drawing +template<size_t rows, size_t cols> +void State::drawImage(const int (&img)[rows][cols], int x, int y) +{ + for (int i = 0; i < rows; ++i) + { + // Skip if outside dimensions of LCD + if (y + i < 0) continue; + else if (y + i >= HEIGHT) break; // Drawing top to bottom, so all succeding points will also be outside + + for (int j = 0; j < cols; ++j) + { + // Dimensions check. Draws left to right. + if (x + j < 0) continue; + else if (x + j >= WIDTH) break; + + if (img[i][j]) + lcd->setPixel(x+j,y+i); + + } + } +} #endif \ No newline at end of file