#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; }