LCD (4.3inch) Shield sample. While USER_BUTTON0 is pressed, it will save the image to the USB memory.When you use this program, we judge you have agreed to the following contents. https://developer.mbed.org/teams/Renesas/wiki/About-LICENSE

Dependencies:   GR-PEACH_video GraphicsFramework R_BSP USBHost mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers bitmap.h Source File

bitmap.h

Go to the documentation of this file.
00001 /** @file bitmap.h */
00002 #include "mbed.h"
00003 
00004 /** A class to communicate a bitmap
00005  *
00006  */
00007 class bitmap {
00008 public:
00009 
00010     /** convert RGB888 to bitmap
00011      *
00012      * @param file_name save file name
00013      * @param buf data buffer address
00014      * @param pic_width picture width
00015      * @param pic_height picture height
00016      * @return save data size
00017      */
00018     int Rgb888ToBmp(char * file_name, uint8_t * buf, unsigned long pic_width, unsigned long pic_height) {
00019         unsigned long offset_size = 54;
00020         unsigned long buf_stride = (((pic_width * 4u) + 31u) & ~31u);
00021         unsigned long pic_size = buf_stride * pic_height;
00022         unsigned long file_size = 0;
00023         int save_file_size = 0;
00024         int write_index = (buf_stride * pic_height) - buf_stride;
00025         unsigned long cnt;
00026         uint8_t wk_bitmap_buf[16];
00027         FILE * fp = fopen(file_name, "w");
00028 
00029         if (fp != NULL) {
00030             file_size = pic_size + offset_size;
00031 
00032             /* BITMAPFILEHEADER */
00033             wk_bitmap_buf[0]  = 'B';
00034             wk_bitmap_buf[1]  = 'M';
00035             wk_bitmap_buf[2]  = (unsigned char)(file_size >> 0);   /* bfSize */
00036             wk_bitmap_buf[3]  = (unsigned char)(file_size >> 8);   /* bfSize */
00037             wk_bitmap_buf[4]  = (unsigned char)(file_size >> 16);  /* bfSize */
00038             wk_bitmap_buf[5]  = (unsigned char)(file_size >> 24);  /* bfSize */
00039             wk_bitmap_buf[6]  = 0;  /* bfReserved1 */
00040             wk_bitmap_buf[7]  = 0;  /* bfReserved1 */
00041             wk_bitmap_buf[8]  = 0;  /* bfReserved2 */
00042             wk_bitmap_buf[9]  = 0;  /* bfReserved2 */
00043             wk_bitmap_buf[10] = (unsigned char)(offset_size >> 0);   /* bfOffBits */
00044             wk_bitmap_buf[11] = (unsigned char)(offset_size >> 8);   /* bfOffBits */
00045             wk_bitmap_buf[12] = (unsigned char)(offset_size >> 16);  /* bfOffBits */
00046             wk_bitmap_buf[13] = (unsigned char)(offset_size >> 24);  /* bfOffBits */
00047             fwrite(wk_bitmap_buf, sizeof(char), 14, fp);
00048 
00049             /* BITMAPINFOHEADER */
00050             wk_bitmap_buf[0]  = 40; /* biSize */
00051             wk_bitmap_buf[1]  = 0;  /* biSize */
00052             wk_bitmap_buf[2]  = 0;  /* biSize */
00053             wk_bitmap_buf[3]  = 0;  /* biSize */
00054             wk_bitmap_buf[4]  = (unsigned char)(pic_width >> 0);    /* biWidth */
00055             wk_bitmap_buf[5]  = (unsigned char)(pic_width >> 8);    /* biWidth */
00056             wk_bitmap_buf[6]  = (unsigned char)(pic_width >> 16);   /* biWidth */
00057             wk_bitmap_buf[7]  = (unsigned char)(pic_width >> 24);   /* biWidth */
00058             wk_bitmap_buf[8]  = (unsigned char)(pic_height >> 0);   /* biHeight */
00059             wk_bitmap_buf[9]  = (unsigned char)(pic_height >> 8);   /* biHeight */
00060             wk_bitmap_buf[10] = (unsigned char)(pic_height >> 16);  /* biHeight */
00061             wk_bitmap_buf[11] = (unsigned char)(pic_height >> 24);  /* biHeight */
00062             wk_bitmap_buf[12] = 1;  /* biPlanes */
00063             wk_bitmap_buf[13] = 0;  /* biPlanes */
00064             wk_bitmap_buf[14] = 32; /* biBitCount */
00065             wk_bitmap_buf[15] = 0;  /* biBitCount */
00066             fwrite(wk_bitmap_buf, sizeof(char), 16, fp);
00067 
00068             wk_bitmap_buf[0]  = 0;  /* biCopmression */
00069             wk_bitmap_buf[1]  = 0;  /* biCopmression */
00070             wk_bitmap_buf[2]  = 0;  /* biCopmression */
00071             wk_bitmap_buf[3]  = 0;  /* biCopmression */
00072             wk_bitmap_buf[4]  = (unsigned char)(pic_size >> 0);   /* biSizeImage */
00073             wk_bitmap_buf[5]  = (unsigned char)(pic_size >> 8);   /* biSizeImage */
00074             wk_bitmap_buf[6]  = (unsigned char)(pic_size >> 16);  /* biSizeImage */
00075             wk_bitmap_buf[7]  = (unsigned char)(pic_size >> 24);  /* biSizeImage */
00076             wk_bitmap_buf[8]  = 0;  /* biXPixPerMeter */
00077             wk_bitmap_buf[9]  = 0;  /* biXPixPerMeter */
00078             wk_bitmap_buf[10] = 0;  /* biXPixPerMeter */
00079             wk_bitmap_buf[11] = 0;  /* biXPixPerMeter */
00080             wk_bitmap_buf[12] = 0;  /* biYPixPerMeter */
00081             wk_bitmap_buf[13] = 0;  /* biYPixPerMeter */
00082             wk_bitmap_buf[14] = 0;  /* biYPixPerMeter */
00083             wk_bitmap_buf[15] = 0;  /* biYPixPerMeter */
00084             fwrite(wk_bitmap_buf, sizeof(char), 16, fp);
00085 
00086             wk_bitmap_buf[0]  = 0;  /* biClrUsed */
00087             wk_bitmap_buf[1]  = 0;  /* biClrUsed */
00088             wk_bitmap_buf[2]  = 0;  /* biClrUsed */
00089             wk_bitmap_buf[3]  = 0;  /* biClrUsed */
00090             wk_bitmap_buf[4]  = 0;  /* biCirImportant */
00091             wk_bitmap_buf[5]  = 0;  /* biCirImportant */
00092             wk_bitmap_buf[6]  = 0;  /* biCirImportant */
00093             wk_bitmap_buf[7]  = 0;  /* biCirImportant */
00094             fwrite(wk_bitmap_buf, sizeof(char), 8, fp);
00095 
00096             save_file_size    = 54;
00097             for (cnt = 0; cnt < pic_height; cnt ++) {
00098                 save_file_size += fwrite(&buf[write_index], sizeof(char), buf_stride, fp);
00099                 write_index -= buf_stride;
00100             }
00101             fclose(fp);
00102         }
00103 
00104         return (int)save_file_size;
00105     };
00106 };