Exemplo n.º 1
0
int main(int argc, char *argv[])
{
	int table[MAX], n;
	//Needs to be initialized to 0 so i can add correctly.
	int frequency[MAXNUMBER] = {0};

	//set pointers to them. Not really needed as they are pointers already (technically)
	int *table_p = table;
	int *frequency_p = frequency;

	create_random(table_p);
	count_frequency(frequency_p, table_p);
	draw_histogram(frequency_p);


	return 0;
}
Exemplo n.º 2
0
PKG main (int argv , char *args[]){

    int type = 0;
    if(argv < 4){
        usage_error();
    }else if(strstr(args[1],"-h") || strstr(args[1],"-help")){
        usage_error();
    }else if(argv == 5 && strstr(args[1],".png")){
        if(strstr(args[4],"-r") || strstr(args[4],"-reverse")){
            type = 1;
        }else{usage_error();}
    }else if(strstr(args[1],"-w") || strstr(args[1],"-waterfall")){
        if(argv < 5){
            return create_waterfall(atoi(args[2]),atoi(args[3]),0,1);
        }else if(argv < 6){
            if(strstr(args[4],"-r") || strstr(args[4],"-reverse")){
                return create_waterfall(atoi(args[2]),atoi(args[3]),1,1);
            }else if(isdigit(*args[4])){
                return create_waterfall(atoi(args[2]),atoi(args[3]),0,atoi(args[4]));
            }else{usage_error();}
        }else if(isdigit(*args[4])){
            if(strstr(args[5],"-r") || strstr(args[5],"-reverse"))
                return create_waterfall(atoi(args[2]),atoi(args[3]),1,atoi(args[4]));
            else{usage_error();}
        }else if(strstr(args[4],"-r") || strstr(args[4],"-reverse")){
            if(isdigit(*args[5]))
                return create_waterfall(atoi(args[2]),atoi(args[3]),1,atoi(args[5]));
            else{usage_error();}
        }else{usage_error();}
    }else if(strstr(args[1],"-c") || strstr(args[1],"-cascade")){
        if(argv < 5){
            return create_cascade(atoi(args[2]),atoi(args[3]),0);
        }else if(strstr(args[4],"-r") || strstr(args[4],"-reverse")){
            return create_cascade(atoi(args[2]),atoi(args[3]),1);
        }else{usage_error();}
    }else if(strstr(args[1],"-a") || strstr(args[1],"-auto")){
        if(argv < 5){
            return create_random(atoi(args[2]),atoi(args[3]),time(NULL)); 
        }else if(isdigit(*args[4])){
            return create_random(atoi(args[2]),atoi(args[3]),atoi(args[4]));
        }else{usage_error();}
    }else if(strstr(args[1],"-bars_h")){
        if(argv < 5){
            return create_hbars(atoi(args[2]),atoi(args[3]),0);
        }else if(strstr(args[4],"-r") || strstr(args[4],"-reverse")){
            return create_hbars(atoi(args[2]),atoi(args[3]),1);
        }else{usage_error();}
    }else if(!strstr(args[1],".png")){
        usage_error();
    }



    FILE *file;
    unsigned char *buffer;
    unsigned long fileLen;
    BMP_HEADER header;
    DIB_HEADER dib_header;

    char* buf = malloc(sizeof(char*));
    //-type truecolor
    sprintf(buf,"convert %s -resize %dx%d -monochrome out.bmp\n",args[1],atoi(args[2]),atoi(args[3]));
    system(buf);


    file = fopen("out.bmp", "rb");
    if(!file){
        fprintf(stderr, "unable to open file: %s\n",args[1]);
        exit(1);
    }


    fseek(file, 0, SEEK_END);
    fileLen=ftell(file);
    fseek(file, 0, SEEK_SET);

    buffer=(char *)malloc(fileLen);
    if(!buffer){
        fprintf(stderr, "Memory error!\n");
        fclose(file);
        exit(1);
    }
    int read = 0;

    /* BMP Header */
    read+=fread (header.signature, 1, 1, file);
    read+=fread (header.signature+1, 1, 1 , file);
    read+=fread (&(header.file_size), 1, 4, file);
    read+=fread (&(header.reserved1), 1, 2, file);
    read+=fread (&(header.reserved2), 1, 2, file);
    read+=fread (&(header.offset), 1, 4, file);
        
    printf("BMP Header\n");
    printf("Filetype: %c%c\n", header.signature[0], header.signature[1]);
    printf("BMP Size in bytes: %u\n", header.file_size);
    printf("Reserved 1 and 2: %d/%d\n",header.reserved1,header.reserved2);
    printf("Offset starting address of the byte where the bitmap image data (pixel array) can be found: %d\n", header.offset);

    printf("------------------------------\n");

    /* DIB Header */
    read+=fread (&(dib_header.dib_size), 1, 4, file);
    read+=fread(&(dib_header.width), 1, 4, file);
    read+=fread(&(dib_header.height), 1, 4, file);
    read+=fread(&(dib_header.planes), 1, 2, file);
    read+=fread(&(dib_header.bits), 1, 2, file);
    read+=fread(&(dib_header.compression),1,4,file);
    read+=fread(&(dib_header.image_size),1,4,file);
    read+=fread(&(dib_header.xresolution),1,4,file);
    read+=fread(&(dib_header.yresolution),1,4,file);
    read+=fread(&(dib_header.ncolors),1,4,file);
    read+=fread(&(dib_header.important_colors),1,4,file);

    printf("DIB Header\n");
    printf("DIB size: %d\n",dib_header.dib_size);
    printf("Image width/height: %dx%d\n",dib_header.width,dib_header.height);
    printf("Number of planes: %d\n",dib_header.planes);
    printf("Bits per pixel: %d\n",dib_header.bits);
    printf("Compression method: %d\n",dib_header.compression);
    printf("Image size of the raw bitmap data: %d\n",dib_header.image_size);
    printf("Horizontal/Vertical resolution of the image pixel/meter: %dx%d\n",dib_header.xresolution,dib_header.yresolution);
    printf("Number of colors in the palette: %d\n",dib_header.ncolors);
    printf("Number of importan colors 0 means all: %d\n",dib_header.important_colors);
    
    char* junk = malloc(header.offset-read);
    if(read != header.offset){
        fread(junk,header.offset-read,1,file);
    }

    //fread(buffer,fileLen-header.offset,sizeof(unsigned char),file);
    fread(buffer,dib_header.image_size,1,file);
    fclose(file);

    int i=0;
    unsigned char zero = 0x00;
    unsigned char one = 0xFF;
    unsigned char black = 0x7F;
    int j = 1;
    int image[dib_header.height][dib_header.width];
    int l=1,m=0;
    int bytes = (dib_header.width * 3);
    if(bytes%4) bytes+=(bytes%4);
    PKG imageStream;
    imageStream.width = dib_header.width;
    imageStream.height = dib_header.height;
    imageStream.image = malloc(sizeof(int*));

    while (i < dib_header.image_size){
       // Uncomment this to print out raw byte data.
        //printf("%02X ",((unsigned char)buffer[i]));
        
        if(!(j%3) && (unsigned char)buffer[i] == zero){
            image[dib_header.height-l][m] = type;
            m++;
        }else if(!(j%3) && (unsigned char)buffer[i] == one){
            image[dib_header.height-l][m] = !type;
            m++;
        }

        if(!( j % bytes)){  j =0; l++;m=0;}
        i++;
        j++;
    }

    int p,q,x = 0;

    for(p = 0; p < dib_header.height-1; p++){
        for(q = 0; q < dib_header.width; q++){
            imageStream.image[x] = image[p][q];
            printf("%d",imageStream.image[x]);
            x++;
        }
        printf("\n");
    }


    return imageStream;
}