#include #include #include #include "ppm.h" static int get_next_action(FILE **fp) // REQUER PONTEIRO PARA ARQUIVO ABERTO !!!!!!!!!!!!! { char testchar; fpos_t position; do { fgetpos(*fp,&position); testchar = fgetc(*fp); } while ( (testchar == ' ') || (testchar == '\n') ); switch (testchar) { case '#' : return 0;break; default : fsetpos(*fp,&position);return 1;break; } } int ppm_read(int *p_w, int *p_h, unsigned char **p_rgb,char **comment, char *file_name) { FILE *fp; char line[80]; int rgb_size; int max,i; fp = fopen(file_name, "rb"); if (fp == NULL) { printf("could not read from %s",file_name); return 0;} fgets(line,80,fp); if(strcmp(line,"P6\n")) { printf("\nO arquivo de entrada nao tem o formato ppm\n"); return 0;} while (!get_next_action(&fp)) { fgets(line, 70, fp); for (i=0;i<70;i++) { if (line[i] == "\n") line[i] = ""; } sprintf(*comment,"%s",line); } fscanf( fp, " %d ", p_w ); while (!get_next_action(&fp)) { fgets(line, 70, fp); for (i=0;i<70;i++) { if (line[i] == "\n") line[i] = ""; } sprintf(*comment,"%s",line); } fscanf( fp, " %d ", p_h ); while (!get_next_action(&fp)) { fgets(line, 70, fp); for (i=0;i<70;i++) { if (line[i] == "\n") line[i] = ""; } sprintf(*comment,"%s",line); } fscanf( fp, " %d", &max ); fgetc(fp); rgb_size=3*(*p_w)*(*p_h); (*p_rgb) = (unsigned char *) calloc(rgb_size, 1); if ((*p_rgb) != NULL) fread( (*p_rgb), rgb_size, 1, fp ); fclose(fp); return 1; } int ppm_write(int w, int h, unsigned char *rgb,char *comment, char *file_name) { FILE *fp; fp = fopen(file_name, "wb"); if (fp == NULL) return 0; fprintf(fp, "P6\n"); fprintf(fp, "#%s\n", comment); fprintf(fp,"%d %d\n255\n", w, h); if (fwrite(rgb, 3*w*h, 1, fp) != 1) { fclose(fp); return 0; } fclose(fp); return 1; }