#include #include "dct.h" #include "bmpjpeg.h" #include "bmp.h" #include "jpeg.h" #define ENCODE 0 #define DECODE 1 #define MAXROWS 1200 #define MAXCOLS 800 #define HEADER 54 unsigned char Image1[MAXCOLS*3*MAXROWS+HEADER]; unsigned char Image2[MAXCOLS*3*MAXROWS+HEADER]; int main(int argc, char *argv[]) { int retval, i,j; int workspace[DCTSIZE_BLOCK]; unsigned char blok8x8[64*3]; unsigned char type; unsigned int x_size, y_size, offset; unsigned char depth; char *fileIn, *fileOut; FILE *fI, *fO; /*******************************************************************************************/ /* Just for testing on the PC */ if(argc != 4) { printf("need more arguments, 0|1 for de/encrypt and 2 more for the in/ouput files"); return 0; } type = atoi(argv[1]); fileIn = argv[2]; fileOut = argv[3]; if (NULL == (fI = fopen(fileIn, "rb"))){ printf("unable to open the file to read from (%s)",fileIn); return 0; } if ((fO = fopen(fileOut,"wb")) == NULL) { printf("unable to open the file to write (%s)",fileOut); return 0; } /* Read the max possible size to the memory */ fread(Image1, sizeof(unsigned char), (MAXROWS*MAXCOLS*3+HEADER), fI); /*******************************************************************************************/ /* The image must be in the memory by now */ // retval = 0; GetBMPHeaderInfo (Image1,&offset,&x_size,&y_size,&depth); /*printf("Before:"); for(i=0;i<(x_size*y_size*3+offset);i++) { if((i%24)==0) printf("\n"); printf("%02x ",Image1[i]); } */ switch(type) { case ENCODE: // GetBMPHeaderInfo (Image1,&offset,&x_size,&y_size,&depth); printf("Image Resolution: %d x %d x %i Offset: %i\n", x_size, y_size, depth, offset); for(i=0;i YUV & Convert to 8x8 --> done BMPto8x8AndYCbCr(i,j,x_size,y_size,offset,depth,Image1,blok8x8); // DCT fdct(blok8x8); //fdct(workspace); // ZZ // Q // VLC (huffman) YCbCrAnd8x8toBMP(i,j,x_size,y_size,offset,depth,Image2,blok8x8); } } break; case DECODE: GetJPEGHeaderInfo (Image1,&offset,&x_size,&y_size,&depth); for(i=0;i RGB & Convert 8x8 to BMP style & YCbCrAnd8x8toBMP(i,j,x_size,y_size,offset,depth,Image2,blok8x8); } } WriteBMPHeaderInfo(Image2,offset,x_size,y_size, depth); break; } WriteBMPHeaderInfo(Image2,offset,x_size,y_size, depth); //Write Image to the output file. fwrite(Image2, sizeof(unsigned char), (x_size*y_size*(depth/8))+offset, fO); fclose(fI); fclose(fO); return retval; }