Add Russian translation provided by Валерий Крувялис <valkru@mail.ru>
[xiph-mirror.git] / w3d / tools / pnmdiff.c
blob1f4ecc4c5acc66d4e37b304e57b28f58e2a5befa
2 /**
3 * Ugly Hack.
4 */
6 #include <sys/types.h>
7 #include <sys/stat.h>
8 #include <fcntl.h>
9 #include <unistd.h>
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <stdint.h>
13 #include <string.h>
14 #include "mem.h"
15 #include "pnm.h"
16 #include "bitcoder.h"
19 static
20 void usage (const char *program_name)
22 printf ("\n"
23 " usage: %s <file1.ppm> <file2.ppm>\n"
24 "\n", program_name);
25 exit (-1);
29 #define ABS(x) ((x) < 0 ? (-x) : (x))
32 int main (int argc, char **argv)
34 int n_chan1, n_chan;
35 uint8_t *rgb1, *rgb2, *diff;
36 uint32_t width, height, width1, height1;
37 uint32_t i;
39 if (argc != 3)
40 usage (argv[0]);
42 if ((n_chan1 = read_pnm_header (argv[1], &width1, &height1)) < 0) {
43 printf ("error opening '%s' !!\n", argv[1]);
44 exit (-1);
47 if ((n_chan = read_pnm_header (argv[2], &width, &height)) < 0) {
48 printf ("error opening '%s' !!\n", argv[2]);
49 exit (-1);
52 if (!(width1 == width && height1 == height && n_chan1 == n_chan)) {
53 printf ("image sizes differ !!\n");
54 exit (-1);
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]);
64 exit(-1);
67 if (read_pnm (argv[2], rgb2) < 0)
69 printf ("error opening '%s' !\n", argv[2]);
70 exit(-1);
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);
79 bit_print(rgb1[i]);
80 bit_print(rgb2[i]);
84 write_pnm (n_chan == 1 ? "diff.pgm" : "diff.ppm", diff, width, height);
86 FREE (rgb1);
87 FREE (rgb2);
88 FREE (diff);
90 return 0;