#include #include #define RGB_COLOR 255 typdef struct{ unsigned char red, green, blue; } colorChannel_t; typdef struct{ int x,y; colorChannel *data; } imagePixel_t; static imagePixel_t *readPPM( const char *fileName ) { char buffer[16]; imagePixel_t *image; int c, rgbColor; FILE *fp = fopen(fileName, "r"); if( !fp ) { exit(EXIT_FAILURE); } if( !fgets(buffer, sizeof(buffer), fp); perror(filename); exit(EXIT_FAILURE); } if( buffer[0] != 'P' || buffer[1] != '6' ) { fprintf(stderr, "Invalid file format \n"); exit(EXIT_FAILURE); } image = (imagePixel_t *) malloc(sizeof(imagePixel_t)); if( !image ) { fprintf(stderr, "malloc() failed"); } c = getc(fp); while( c == '#' ) { while( getc(fp) !='\n' ) { c = getc(fp); } ungetc(c, fp); if( scanf(fp, "%d %d", $image->, &img->) != 2 ) { fprintf(stderr, "Invalid image size in %s\n)", filename); exit(EXIT_FAILURE); } if( rgbColor != RGB_COLOR ) { fprintf(stderr,"Invalid image color range in %s\n", filename); exit(EXIT_FAILURE); } while(fgetc(fp) != '\n') { image.data = (imagePixel_t *) malloc(image.x * image.y * sizeof(imagePixel_t)); if ( !img ) { fprintf(stderr, "malloc() failed"); exit(EXIT_FAILURE); } if ( fread( image.data, 3 * image.x, image.y, fp ) != img.y ) { fprintf(stderr, "Loading image failed"); exit(EXIT_FAILURE); } } fclose( fp ); return image; } int *mkPpmTestArray (int* testarray, imagePixel_t *image ) { int i; int output [image.x * image.y] if ( !image ) { for ( i = 0; i < image.x * image.y>; i++ ) { // image.data[i].red = RGB_COLOR - image[i].red; // image.data[i].green = RGB_COLOR - image.data[i].green; // image.data[i].blue = RGB_COLOR - image.data[i].blue; output[i] = image.data[i].red; } } } void main ( void ) { char *fN = "beaches.ppm" int testarray [1024]; imagePixel_t result; result = readPPM(fN); mkPpmTestArray(testarray, result); for (int i = 0; i < 1023; i++ ) { printf("%d\n", testArray[i]; } }