LED matrix library for http://goo.gl/y6VnO6
Diff: LEDMatrix.cpp
- Revision:
- 1:b528f8e32726
- Parent:
- 0:13728deac7a7
--- a/LEDMatrix.cpp Fri Nov 08 06:45:52 2013 +0000 +++ b/LEDMatrix.cpp Tue Feb 18 10:51:13 2014 +0800 @@ -60,8 +60,8 @@ ASSERT(width > x); ASSERT(height > y); - uint8_t *byte = displaybuf + x * 8 + y / 8; - uint8_t bit = y % 8; + uint8_t *byte = displaybuf + x / 8 + y * width / 8; + uint8_t bit = x % 8; if (pixel) { *byte |= 0x80 >> bit; @@ -79,17 +79,15 @@ } } -void LEDMatrix::drawImage(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t *image) +void LEDMatrix::drawImage(uint16_t xoffset, uint16_t yoffset, uint16_t width, uint16_t height, const uint8_t *image) { - ASSERT(0 == ((x2 - x1) % 8)); - - for (uint16_t x = x1; x < x2; x++) { - for (uint16_t y = y1; y < y2; y++) { - uint8_t *byte = image + x * 8 + y / 8; - uint8_t bit = 7 - (y % 8); + for (uint16_t y = 0; y < height; y++) { + for (uint16_t x = 0; x < width; x++) { + const uint8_t *byte = image + (x + y * width) / 8; + uint8_t bit = 7 - x % 8; uint8_t pixel = (*byte >> bit) & 1; - drawPoint(x, y, pixel); + drawPoint(x + xoffset, y + yoffset, pixel); } } } @@ -124,7 +122,7 @@ uint8_t *head = displaybuf + row * (width / 8); for (uint8_t line = 0; line < (height / 16); line++) { uint8_t *ptr = head; - head += line * width * 2; + head += width * 2; // width * 16 / 8 for (uint8_t byte = 0; byte < (width / 8); byte++) { uint8_t pixels = *ptr;