1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
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;
for(i = 38; i < offset; i++)
Image[i]=0;
}
|