void GetBMPHeaderInfo (unsigned char *Image,unsigned int *offset,unsigned int *x_size,unsigned int *y_size, unsigned char *depth) { *offset = ((int)Image[13] << 24) + ((int)Image[12] << 16) + ((int)Image[11] << 8) + Image[10]; *x_size = ((int)Image[21] << 24) + ((int)Image[20] << 16) + ((int)Image[19] << 8) + Image[18]; *y_size = ((int)Image[25] << 24) + ((int)Image[24] << 16) + ((int)Image[23] << 8) + Image[22]; *depth = ((int)Image[29] << 8) + Image[28]; } void WriteBMPHeaderInfo(unsigned char *Image,unsigned int offset,unsigned int x_size,unsigned int y_size, unsigned char depth) { unsigned int ByteSize, i; ByteSize = (x_size*y_size*(depth/8)); // 2 - signature, must be 4D42 hex Image[0]=0x42; Image[1]=0x4d; // 4 - size of BMP file in bytes (unreliable) Image[5] = (ByteSize+offset) >> 24; Image[4] = (ByteSize+offset) >> 16; Image[3] = (ByteSize+offset) >> 8; Image[2] = (ByteSize+offset); // 4 - reserved, must be zero Image[6] = 0; Image[7] = 0; Image[8] = 0; Image[9] = 0; // 4 - offset Image[13] = offset >> 24; Image[12] = offset >> 16; Image[11] = offset >> 8; Image[10] = offset; // 4 - size of BITMAPINFOHEADER structure, must be 40 Image[14] = 40; Image[15] = 0; Image[16] = 0; Image[17] = 0; // 4 - x_size Image[21] = x_size >> 24; Image[20] = x_size >> 16; Image[19] = x_size >> 8; Image[18] = x_size; // 4 - y_size Image[25] = y_size >> 24; Image[24] = y_size >> 16; Image[23] = y_size >> 8; Image[22] = y_size; // 2 - number of planes in the image, must be 1 Image[26] = 1; Image[27] = 0; // 2 - depth Image[29]= 0x0; Image[28]= depth; // 4 - compression type (0=none, 1=RLE-8, 2=RLE-4) Image[30] = 0; Image[31] = 0; Image[32] = 0; Image[33] = 0; // 34 4 - size of image data in bytes (including padding) Image[37] = ByteSize >> 24; Image[36] = ByteSize >> 16; Image[35] = ByteSize >> 8; Image[34] = ByteSize; /* If it is a grayscale image of 8 bits we need to make the palette available */ if(depth == 8) { for(i = 0; i <= 0xff; i++) { Image[(i*4)+54]=i; Image[(i*4)+1+54]=i; Image[(i*4)+2+54]=i; Image[(i*4)+3+54]=00; } } else for(i = 38; i < offset; i++) Image[i]=0; }