[go: up one dir, main page]

Menu

[r8]: / grueworld / ppm.h  Maximize  Restore  History

Download this file

74 lines (61 with data), 1.5 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
int readPPM(const char *filename,
unsigned char **data,
unsigned int *width,
unsigned int *height) {
*data =0;
char header[256];
int nbyte;
FILE *fp = fopen(filename, "rb");
if (!fp)return 0;
header[2]=0;
fscanf(fp,"%c%c%c",&header[0],&header[1],&header[3]);
assert (!strncmp(header, "P6", strlen("P6")));
int err;
do {
err=fscanf(fp,"#%*[^#\n]\n");
}while (err!=0&&err!=EOF);
fscanf (fp, "%d %d %d\n", width, height, &nbyte);
assert (nbyte == 255);
//assert (*width > 0 && *width <= 2048);
//assert (*height > 0 && *height <= 2048);
*data = (unsigned char *) malloc (*width * *height * 3);
assert (*data);
fread(*data, *width * *height, 3, fp);
fclose(fp);
return 1;
}
int diff(char * f1,char * f2) {
FILE * f=fopen(f1,"rb");
FILE * fp=fopen(f2,"rb");
if ((!f)||!fp) {
return 1;
}
int chr;
while (!feof(f)) {
chr=fgetc(fp);
int diff = chr-fgetc(f);
diff = diff<0?-diff:diff;
if (diff>5) {
printf ("diff of %d\n",diff);
fclose(f);
fclose(fp);
return 1;
}
}
if ((!feof(f))||(!feof(fp)))
return 1;
fclose(f);
fclose(fp);
return 0;
}
int writePPM(const char *filename,
const unsigned char *data,
unsigned int width,
unsigned int height) {
FILE *fp = fopen(filename, "wb");
assert (fp);
fprintf(fp, "%s\n%d %d %d\n", "P6", width, height, 255);
fwrite(data, width*height, 3, fp);
fclose(fp);
return 0;
}