20 void usage (const char *program_name
)
23 " usage: %s <file1.ppm> <file2.ppm>\n"
29 #define ABS(x) ((x) < 0 ? (-x) : (x))
32 int main (int argc
, char **argv
)
35 uint8_t *rgb1
, *rgb2
, *diff
;
36 uint32_t width
, height
, width1
, height1
;
42 if ((n_chan1
= read_pnm_header (argv
[1], &width1
, &height1
)) < 0) {
43 printf ("error opening '%s' !!\n", argv
[1]);
47 if ((n_chan
= read_pnm_header (argv
[2], &width
, &height
)) < 0) {
48 printf ("error opening '%s' !!\n", argv
[2]);
52 if (!(width1
== width
&& height1
== height
&& n_chan1
== n_chan
)) {
53 printf ("image sizes differ !!\n");
57 rgb1
= MALLOC (width
* height
* n_chan
);
58 rgb2
= MALLOC (width
* height
* n_chan
);
59 diff
= MALLOC (width
* height
* n_chan
);
61 if (read_pnm (argv
[1], rgb1
) < 0)
63 printf ("error opening '%s' !\n", argv
[1]);
67 if (read_pnm (argv
[2], rgb2
) < 0)
69 printf ("error opening '%s' !\n", argv
[2]);
73 for (i
=0; i
<width
*height
*n_chan
; i
++) {
74 diff
[i
] = (rgb1
[i
] == rgb2
[i
]) ? 0 : 255;
75 // diff[i] = ((int) rgb1[i] - rgb2[i])*64 + 128;
76 if (diff
[i
] != 0/*128*/) {
77 printf("%i/%i: %u <-> %u -- diff == %i\n",
78 i
, width
*height
*n_chan
-1, rgb1
[i
], rgb2
[i
], diff
[i
] - 128);
84 write_pnm (n_chan
== 1 ? "diff.pgm" : "diff.ppm", diff
, width
, height
);