test
Dependencies: GR-PEACH_video USBHost USBHost_custom
Fork of GR-PEACH_Camera_in by
bitmap.h
- Committer:
- ymichimoto
- Date:
- 2017-04-18
- Revision:
- 4:23d1c6e5bca2
- Parent:
- 0:2f1caf4ce924
File content as of revision 4:23d1c6e5bca2:
/** @file bitmap.h */ #include "mbed.h" /** A class to communicate a bitmap * */ class bitmap { public: /** convert RGB888 to bitmap * * @param file_name save file name * @param buf data buffer address * @param pic_width picture width * @param pic_height picture height * @return save data size */ int Rgb888ToBmp(char * file_name, uint8_t * buf, unsigned long pic_width, unsigned long pic_height) { unsigned long offset_size = 54; unsigned long buf_stride = (((pic_width * 4u) + 31u) & ~31u); unsigned long pic_size = buf_stride * pic_height; unsigned long file_size = 0; int save_file_size = 0; int write_index = (buf_stride * pic_height) - buf_stride; unsigned long cnt; uint8_t wk_bitmap_buf[16]; FILE * fp = fopen(file_name, "w"); if (fp != NULL) { file_size = pic_size + offset_size; /* BITMAPFILEHEADER */ wk_bitmap_buf[0] = 'B'; wk_bitmap_buf[1] = 'M'; wk_bitmap_buf[2] = (unsigned char)(file_size >> 0); /* bfSize */ wk_bitmap_buf[3] = (unsigned char)(file_size >> 8); /* bfSize */ wk_bitmap_buf[4] = (unsigned char)(file_size >> 16); /* bfSize */ wk_bitmap_buf[5] = (unsigned char)(file_size >> 24); /* bfSize */ wk_bitmap_buf[6] = 0; /* bfReserved1 */ wk_bitmap_buf[7] = 0; /* bfReserved1 */ wk_bitmap_buf[8] = 0; /* bfReserved2 */ wk_bitmap_buf[9] = 0; /* bfReserved2 */ wk_bitmap_buf[10] = (unsigned char)(offset_size >> 0); /* bfOffBits */ wk_bitmap_buf[11] = (unsigned char)(offset_size >> 8); /* bfOffBits */ wk_bitmap_buf[12] = (unsigned char)(offset_size >> 16); /* bfOffBits */ wk_bitmap_buf[13] = (unsigned char)(offset_size >> 24); /* bfOffBits */ fwrite(wk_bitmap_buf, sizeof(char), 14, fp); /* BITMAPINFOHEADER */ wk_bitmap_buf[0] = 40; /* biSize */ wk_bitmap_buf[1] = 0; /* biSize */ wk_bitmap_buf[2] = 0; /* biSize */ wk_bitmap_buf[3] = 0; /* biSize */ wk_bitmap_buf[4] = (unsigned char)(pic_width >> 0); /* biWidth */ wk_bitmap_buf[5] = (unsigned char)(pic_width >> 8); /* biWidth */ wk_bitmap_buf[6] = (unsigned char)(pic_width >> 16); /* biWidth */ wk_bitmap_buf[7] = (unsigned char)(pic_width >> 24); /* biWidth */ wk_bitmap_buf[8] = (unsigned char)(pic_height >> 0); /* biHeight */ wk_bitmap_buf[9] = (unsigned char)(pic_height >> 8); /* biHeight */ wk_bitmap_buf[10] = (unsigned char)(pic_height >> 16); /* biHeight */ wk_bitmap_buf[11] = (unsigned char)(pic_height >> 24); /* biHeight */ wk_bitmap_buf[12] = 1; /* biPlanes */ wk_bitmap_buf[13] = 0; /* biPlanes */ wk_bitmap_buf[14] = 32; /* biBitCount */ wk_bitmap_buf[15] = 0; /* biBitCount */ fwrite(wk_bitmap_buf, sizeof(char), 16, fp); wk_bitmap_buf[0] = 0; /* biCopmression */ wk_bitmap_buf[1] = 0; /* biCopmression */ wk_bitmap_buf[2] = 0; /* biCopmression */ wk_bitmap_buf[3] = 0; /* biCopmression */ wk_bitmap_buf[4] = (unsigned char)(pic_size >> 0); /* biSizeImage */ wk_bitmap_buf[5] = (unsigned char)(pic_size >> 8); /* biSizeImage */ wk_bitmap_buf[6] = (unsigned char)(pic_size >> 16); /* biSizeImage */ wk_bitmap_buf[7] = (unsigned char)(pic_size >> 24); /* biSizeImage */ wk_bitmap_buf[8] = 0; /* biXPixPerMeter */ wk_bitmap_buf[9] = 0; /* biXPixPerMeter */ wk_bitmap_buf[10] = 0; /* biXPixPerMeter */ wk_bitmap_buf[11] = 0; /* biXPixPerMeter */ wk_bitmap_buf[12] = 0; /* biYPixPerMeter */ wk_bitmap_buf[13] = 0; /* biYPixPerMeter */ wk_bitmap_buf[14] = 0; /* biYPixPerMeter */ wk_bitmap_buf[15] = 0; /* biYPixPerMeter */ fwrite(wk_bitmap_buf, sizeof(char), 16, fp); wk_bitmap_buf[0] = 0; /* biClrUsed */ wk_bitmap_buf[1] = 0; /* biClrUsed */ wk_bitmap_buf[2] = 0; /* biClrUsed */ wk_bitmap_buf[3] = 0; /* biClrUsed */ wk_bitmap_buf[4] = 0; /* biCirImportant */ wk_bitmap_buf[5] = 0; /* biCirImportant */ wk_bitmap_buf[6] = 0; /* biCirImportant */ wk_bitmap_buf[7] = 0; /* biCirImportant */ fwrite(wk_bitmap_buf, sizeof(char), 8, fp); save_file_size = 54; for (cnt = 0; cnt < pic_height; cnt ++) { save_file_size += fwrite(&buf[write_index], sizeof(char), buf_stride, fp); write_index -= buf_stride; } fclose(fp); } return (int)save_file_size; }; };