This is the David Smart RA8875 Library with mods for working with FRDM-K64F
Diff: GraphicsDisplayJPEG.cpp
- Revision:
- 136:224e03d5c31f
- Parent:
- 121:6bc4911f5e55
- Child:
- 167:8aa3fb2a5a31
diff -r af519fe4ba91 -r 224e03d5c31f GraphicsDisplayJPEG.cpp --- a/GraphicsDisplayJPEG.cpp Sun Nov 13 02:06:30 2016 +0000 +++ b/GraphicsDisplayJPEG.cpp Wed Nov 16 02:48:45 2016 +0000 @@ -839,14 +839,10 @@ return privInFunc(jd, buff, ndata); } - +// RGB565 if JD_FORMAT == 1 +// RGB888 if JD_FORMAT == 0 uint16_t GraphicsDisplay::privOutFunc(JDEC * jd, void * bitmap, JRECT * rect) { - #if JD_FORMAT == 1 - uint16_t *src = (uint16_t *)bitmap; - #else - uint8_t *src = (uint8_t *)bitmap; - #endif int x0 = rect->left; int x1 = rect->right; int y0 = rect->top; @@ -854,15 +850,34 @@ INFO("privOutFunc: (%d,%d)-(%d,%d) : (%d,%d)", x0,y0, x1,y1, width(), height()); if (y0 >= height() || x0 >= width()) - return 1; - - if (x1 > width()-1) x1 = width() - 1; - if (y1 > height()-1) y1 = height() - 1; - - INFO("checkpoint"); + return 1; // off the right || bottom of screen + if (x1 > width()-1) x1 = width() - 1; // clip to width + if (y1 > height()-1) y1 = height() - 1; // clip to height + int w = x1 - x0 + 1; + +#if 1 + uint32_t pixelCount = (1 + (y1-y0)) * (1+x1-x0); + #if JD_FORMAT == 0 + uint8_t *s = (uint8_t *)bitmap; + uint16_t rgb565, *d = (uint16_t *)s; + uint32_t pCount = pixelCount; + + do { + rgb565 = (*s++ & 0xF8) << 8; /* RRRRR----------- */ + rgb565 |= (*s++ & 0xFC) << 3; /* -----GGGGGG----- */ + rgb565 |= *s++ >> 3; /* -----------BBBBB */ + *d++ = rgb565; + } while (--pCount); + #endif + // + window(x0+img_x, y0+img_y, w, y1 - y0 + 2); + uint16_t *src = (uint16_t *)bitmap; // pointer to RGB565 format + pixelStream(src, pixelCount, x0+img_x, y0+img_y); + window(); +#else for (int y= y0; y <= y1; y++) { - SetGraphicsCursor(x0, y); + SetGraphicsCursor(x0+img_x, y+img_y); _StartGraphicsStream(); #if JD_FORMAT == 1 uint16_t *p = src + w * (y - y0); @@ -879,6 +894,7 @@ } _EndGraphicsStream(); } +#endif return 1; } @@ -1188,6 +1204,5 @@ if (rc != JDR_OK) return rc; } } - return rc; }