Demonstration of the Bitmap rendering - reads BMP and JPG files in many format variants and renders to the screen.

Dependencies:   FlashFileSystem mbed RA8875

Bitmap and JPEG Demo

This demo publishes each graphic file from a list of files to the display. The graphic files can be BMP, JPG, or ICO. On the terminal it displays the filename and the return-code (in case of an error). This demo works as intended on the 480x272 display in either 8 or 16 bit per pixel mode and it should work on larger displays.

Items of interest to change and rebuild/test:

// Not all systems have the LocalFileSystem. Plug in the library and driver for yours.
LocalFileSystem local("local");             // Image source

TestImage_T TestImage[] = {
    { 0, 0, "/local/01601602.bmp"},
    { 0, 0, "/local/48027202.bmp"},
    { 0, 0, "/local/48027204.bmp"},
    { 0, 0, "/local/48027208.bmp"},
    { 0, 0, "/local/48027224.bmp"},
    { 0, 0, "/local/p480272.jpg"},
    { 0, 0, "/local/p480272.bmp"}
};

// deefine your screen size and color depth. 
#define SCREEN_W 480
#define SCREEN_H 272
#define SCREEN_BPP 16

LocalFileSystem may need to be altered to SDFileSystem (for example) and the corresponding paths in the TestImage array.

Also, the Screen size and bit per pixel color depth.

Images

The following image files are saved in different resolution and color depth. The first, and smallest, was simply for developing the monochrome support. Others are 4-bit color, 8-bit color, 24-bit color, and a mislabeled 1-bit color (shown as 02).

/media/uploads/WiredHome/testimages.zip

Revision:
1:84fb3e9adaaf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tjpgd.h	Sun May 15 18:57:36 2016 +0000
@@ -0,0 +1,82 @@
+/*----------------------------------------------------------------------------/
+/ TJpgDec - Tiny JPEG Decompressor include file               (C)ChaN, 2012
+/----------------------------------------------------------------------------*/
+#ifndef _TJPGDEC
+#define _TJPGDEC
+/*---------------------------------------------------------------------------*/
+/* System Configurations */
+
+#define JD_SZBUF        512 /* Size of stream input buffer */
+#define JD_FORMAT       1   /* Output pixel format 0:RGB888 (3 BYTE/pix), 1:RGB565 (1 WORD/pix) */
+#define JD_USE_SCALE    1   /* Use descaling feature for output */
+#define JD_TBLCLIP      1   /* Use table for saturation (might be a bit faster but increases 1K bytes of code size) */
+
+/*---------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//#include "integer.h"
+#include "DisplayDefs.h"
+
+
+/* Error code */
+typedef enum {
+    JDR_OK = 0, /* 0: Succeeded */
+    JDR_INTR,   /* 1: Interrupted by output function */ 
+    JDR_INP,    /* 2: Device error or wrong termination of input stream */
+    JDR_MEM1,   /* 3: Insufficient memory pool for the image */
+    JDR_MEM2,   /* 4: Insufficient stream input buffer */
+    JDR_PAR,    /* 5: Parameter error */
+    JDR_FMT1,   /* 6: Data format error (may be damaged data) */
+    JDR_FMT2,   /* 7: Right format but not supported */
+    JDR_FMT3    /* 8: Not supported JPEG standard */
+} JRESULT;
+
+
+
+/* Rectangular structure */
+typedef struct {
+    loc_t left, right, top, bottom;
+} JRECT;
+
+
+
+/* Decompressor object structure */
+typedef struct JDEC JDEC;
+struct JDEC {
+    uint16_t dctr;              /* Number of bytes available in the input buffer */
+    uint8_t * dptr;             /* Current data read ptr */
+    uint8_t * inbuf;            /* Bit stream input buffer */
+    uint8_t dmsk;              /* Current bit in the current read byte */
+    uint8_t scale;             /* Output scaling ratio */
+    uint8_t msx, msy;          /* MCU size in unit of block (width, height) */
+    uint8_t qtid[3];           /* Quantization table ID of each component */
+    int16_t dcv[3];           /* Previous DC element of each component */
+    uint16_t nrst;              /* Restart inverval */
+    uint16_t width, height;     /* Size of the input image (pixel) */
+    uint8_t * huffbits[2][2];   /* Huffman bit distribution tables [id][dcac] */
+    uint16_t * huffcode[2][2];   /* Huffman code word tables [id][dcac] */
+    uint8_t * huffdata[2][2];   /* Huffman decoded data tables [id][dcac] */
+    int32_t * qttbl[4];         /* Dequaitizer tables [id] */
+    void * workbuf;          /* Working buffer for IDCT and RGB output */
+    uint8_t * mcubuf;           /* Working buffer for the MCU */
+    void * pool;             /* Pointer to available memory pool */
+    uint16_t sz_pool;           /* Size of momory pool (bytes available) */
+    uint16_t (*infunc)(JDEC*, uint8_t *, uint16_t);/* Pointer to jpeg stream input function */
+    void * device;           /* Pointer to I/O device identifiler for the session */
+};
+
+
+
+/* TJpgDec API functions */
+JRESULT jd_prepare (JDEC*, uint16_t(*)(JDEC*,uint8_t *,uint16_t), void*, uint16_t, void*);
+JRESULT jd_decomp (JDEC*, uint16_t(*)(JDEC*,void*,JRECT*), uint8_t);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TJPGDEC */