GR-PEACH barcode reader. This program uses ZBar bar code reader. ZBar is licensed under the GNU LGPL 2.1 to enable development of both open source and commercial projects.
Dependencies: GR-PEACH_video mbed zbar_010
Fork of GR-PEACH_Camera_in by
bitmap.h
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 };
Generated on Fri Jul 15 2022 20:47:50 by 1.7.2