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
|
#define SOI_MK 0xFFD8 /* start of image */
#define SOF_MK 0xFFC0 /* start of frame */
#define EOI_MK 0xFFD9 /* end of image */
#define DRI_MK 0xFFDD /* restart interval */
#define get_size(fi) (((unsigned int)Image[fi]) << 8) + (unsigned int)Image[fi+1]
unsigned char GetJPEGHeaderInfo (unsigned char *Image,unsigned int *offset,unsigned int *x_size,unsigned int *y_size, unsigned char *depth)
{
unsigned int aux;
int hCounter = 0;
/* First find the SOI marker: */
aux = get_size(hCounter); hCounter+=2;
if (aux != SOI_MK)
{ printf("INFO:\tNO SOI marker!\n"); return 0;}
printf("%ld:\tINFO:\tFound the SOI marker!\n", hCounter);
/* Read first marker */
while( aux != SOF_MK)
{
aux = get_size(hCounter); hCounter+=2;
if(aux == SOF_MK)
{
get_size(hCounter); hCounter+=2; /* header size, don't care */
/* load basic image parameters */
hCounter++; /* precision, 8bit, don't care */
*y_size = get_size(hCounter); hCounter+=2;
*x_size = get_size(hCounter); hCounter+=2;
printf("\tINFO:\tImage size is %d by %d\n", *x_size, *y_size);
*depth = Image[hCounter]; /* # of components */
printf("\tINFO:\t");
switch (*depth)
{
case 1:
printf("Monochrome");
break;
case 3:
printf("Color");
break;
default:
printf("Not a");
break;
}
printf(" JPEG image!\n");
return 0;
}
else
hCounter = hCounter + get_size(hCounter);
}
return 1;
}
unsigned char WriteJPEGHeaderInfo (unsigned char *Image,unsigned int offset,unsigned int x_size,unsigned int y_size, unsigned char depth)
{
return 0;
}
|