From 3e1f9d1ca1bc599a401ee66793c5aa6885354ac0 Mon Sep 17 00:00:00 2001 From: Oliver Schinagl Date: Wed, 13 Apr 2005 21:43:13 +0000 Subject: 8 and 24 bits working. And PSV just won :-).. --- src/bmpjpeg.c | 20 +++++----- src/main.c | 119 +++++++++++++++++++++++----------------------------------- 2 files changed, 58 insertions(+), 81 deletions(-) diff --git a/src/bmpjpeg.c b/src/bmpjpeg.c index 3d76e70..a21bfe8 100644 --- a/src/bmpjpeg.c +++ b/src/bmpjpeg.c @@ -2,13 +2,14 @@ void BMPto8x8AndYCbCr(int Start_x, int Start_y, int ImageSize_x, int ImageSize_y, int offset, unsigned char depth ,unsigned char *Image, unsigned char *blok8x8) { - unsigned char i; + unsigned char i,color; int x,y,Start_point; +// printf("\nBMPto8x8AndYCbCr:\n"); depth = depth/8; Start_point = offset + (ImageSize_x*(ImageSize_y-1)+Start_x-(Start_y*ImageSize_x))*depth; for(i=0;i<(64*depth);i+=depth) { - if((i%8)==0) printf("\n"); +// if((i%8)==0) printf("\n"); if((Start_y+(i/(8*depth))) < ImageSize_y) { if((Start_x+((i%(8*depth))/depth)) < ImageSize_x) @@ -20,12 +21,12 @@ void BMPto8x8AndYCbCr(int Start_x, int Start_y, int ImageSize_x, int ImageSize_y Image[Start_point+(i%(8*depth))+2-(i/(8*depth))*(ImageSize_x*depth)], &blok8x8[i],&blok8x8[i+1],&blok8x8[i+2]); - printf("%02x%02x%02x|",blok8x8[i+0],blok8x8[i+1],blok8x8[i+2]); + // printf("%02x%02x%02x|",blok8x8[i+0],blok8x8[i+1],blok8x8[i+2]); } if(depth == 1) { - blok8x8[i+0] = Image[Start_point+(i%(8*depth))-(i/(8*depth))*(ImageSize_x*depth)]; - printf("%02x ",blok8x8[i]); + blok8x8[i] = Image[Start_point+(i%(8*depth))-(i/(8*depth))*(ImageSize_x*depth)]; +// printf("%02x ",blok8x8[i]); } } } @@ -38,11 +39,12 @@ void YCbCrAnd8x8toBMP(int Start_x, int Start_y, int ImageSize_x, int ImageSize_y { unsigned char i; int x,y,Start_point; +// printf("\nYCbCrAnd8x8toBMP:\n"); depth = depth/8; Start_point = offset + (ImageSize_x*(ImageSize_y-1)+Start_x-(Start_y*ImageSize_x))*depth; for(i=0;i<(64*depth);i+=depth) { - if((i%8)==0) printf("\n"); +// if((i%8)==0) printf("\n"); if((Start_y+(i/(8*depth))) < ImageSize_y) { if((Start_x+((i%(8*depth))/depth)) < ImageSize_x) @@ -54,12 +56,12 @@ void YCbCrAnd8x8toBMP(int Start_x, int Start_y, int ImageSize_x, int ImageSize_y &Image[Start_point+(i%(8*depth))+1-(i/(8*depth))*(ImageSize_x*depth)], &Image[Start_point+(i%(8*depth))+2-(i/(8*depth))*(ImageSize_x*depth)]); - printf("%02x%02x%02x|",blok8x8[i+0],blok8x8[i+1],blok8x8[i+2]); + // printf("%02x%02x%02x|",blok8x8[i+0],blok8x8[i+1],blok8x8[i+2]); } if(depth == 1) { - Image[Start_point+(i%(8*depth))-(i/(8*depth))*(ImageSize_x*depth)] = blok8x8[i+0]; - printf("%02x ",blok8x8[i]); + Image[Start_point+(i%(8*depth))-(i/(8*depth))*(ImageSize_x*depth)] = blok8x8[i]; +// printf("%02x ",blok8x8[i]); } } } diff --git a/src/main.c b/src/main.c index 332978c..39d99bb 100644 --- a/src/main.c +++ b/src/main.c @@ -6,30 +6,16 @@ #define ENCODE 0 #define DECODE 1 -#define MAXROWS 1024 -#define MAXCOLS 768 +#define MAXROWS 1200 +#define MAXCOLS 800 #define HEADER 54 unsigned char Image1[MAXCOLS*3*MAXROWS+HEADER]; - -/*------------------------------------------*/ -/* some constants for on-the-fly IQ and IZZ */ -/*------------------------------------------*/ - -static const int G_ZZ[] = { - 0, 1, 8, 16, 9, 2, 3, 10, - 17, 24, 32, 25, 18, 11, 4, 5, - 12, 19, 26, 33, 40, 48, 41, 34, - 27, 20, 13, 6, 7, 14, 21, 28, - 35, 42, 49, 56, 57, 50, 43, 36, - 29, 22, 15, 23, 30, 37, 44, 51, - 58, 59, 52, 45, 38, 31, 39, 46, - 53, 60, 61, 54, 47, 55, 62, 63 -}; +unsigned char Image2[MAXCOLS*3*MAXROWS+HEADER]; int main(int argc, char *argv[]) { - int retval, i; + int retval, i,j; int workspace[DCTSIZE_BLOCK]; unsigned char blok8x8[64*3]; unsigned char type; @@ -71,78 +57,67 @@ int main(int argc, char *argv[]) { // 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); + // 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); - // RGB -> YUV ---> done + 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); - // Convert to 8x8 --> done - //BMPto8x8AndYCbCr(0,0,x_size,y_size,offset,depth,Image1,blok8x8); - // DCT - fdct(workspace); + // ZZ - // ZZ + // Q - // Q + // VLC (huffman) - // VLC (huffman) + YCbCrAnd8x8toBMP(i,j,x_size,y_size,offset,depth,Image2,blok8x8); + } + } break; case DECODE: - GetJPEGHeaderInfo (Image1,&offset,&x_size,&y_size,&depth); - // VLD (huffman) - - // IQ + for(i=0;i done - // YUV -> RGB - // YCbCrAnd8x8toBMP() - // WriteBMPHeaderInfo(Image1,offset,x_size,y_size, depth); + // IQ - break; - } + // ZZ + // IDCT + //idct(workspace); + // YUV -> 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); - printf("Before:"); - for(i=0;i<(x_size*y_size*3);i++) - { - if((i%24)==0) printf("\n"); - printf("%02x ",Image1[i+offset]); - } - printf("\nBMPto8x8 functie\n"); - - BMPto8x8AndYCbCr(0,0,x_size,y_size,offset,depth,Image1,blok8x8); - printf("\n8x8 Blok:\n"); - for(i=0;i<64;i++) - { - printf("%02x",blok8x8[i]); - } - - for(i=0;i<(x_size*y_size*3);i++) - { - Image1[i+offset] = 0; - } - - printf("\n8x8toBMP functie\n"); - YCbCrAnd8x8toBMP(0,0,x_size,y_size,offset,depth,Image1,blok8x8); - - printf("\nAfter:\n"); - for(i=0;i<(x_size*y_size*3);i++) - { - if((i%24)==0) printf("\n"); - printf("%02x ",Image1[i+offset]); + break; } - - + WriteBMPHeaderInfo(Image2,offset,x_size,y_size, depth); //Write Image to the output file. - fwrite(Image1, sizeof(unsigned char), (x_size*y_size*(depth/8))+offset, fO); + fwrite(Image2, sizeof(unsigned char), (x_size*y_size*(depth/8))+offset, fO); fclose(fI); fclose(fO); -- cgit v0.12