David's final changes: more profiler features, fixes.
[ipdf/code.git] / src / tests / bmpdiff.cpp
1 /**
2  * Get diff of bmps
3  */
4
5 #include <SDL.h>
6 #include <cassert>
7 #include "ipdf.h"
8
9 using namespace std;
10 using namespace IPDF;
11
12
13 int main(int argc, char ** argv)
14 {
15         SDL_Surface * orig = SDL_LoadBMP(argv[1]);
16         SDL_Surface * diff = SDL_LoadBMP(argv[2]);
17         
18         assert(orig->w == diff->w && orig->h == diff->h);
19         int w = diff->w;
20         int h = diff->h;
21         
22         uint8_t * a = (uint8_t*)orig->pixels;
23         uint8_t * b = (uint8_t*)diff->pixels;
24         
25         int total_diff = 0;
26
27         int mean_dist = 0;
28         int count_a = 0;
29         int count_b = 0;
30         for (int x = 0; x < w; ++x)
31         {
32                 for (int y = 0; y < h; ++y)
33                 {
34                         if (a[4*(x + w*y)] == 0)
35                                 ++count_a;
36                         if (b[4*(x + w*y)] == 0)
37                                 ++count_b;
38                         
39                         if (a[4*(x + w*y)] != b[4*(x + w*y)] && b[4*(x+w*y)] == 0)                              
40                         {
41                                 total_diff++;
42                                 // 
43
44                                 int r = 1;
45                                 for (r=1; r+x < w; ++r)
46                                 {
47                                         if (a[4*(x+r + w*y)] == 0)
48                                                 break;
49                                 }
50                                 int l = 1;
51                                 for (l=1; x-l >= 0; ++l)
52                                 {
53                                         if (a[4*(x-l + w*y)] == 0)
54                                                 break;
55                                 }
56                                 int u = 1;
57                                 for (u=1; y-u >= 0; ++u)
58                                 {
59                                         if (a[4*(x + w*(y-u))] == 0)
60                                                 break;
61                                 }
62                                 
63                                 int d = 1;
64                                 for (d=1; y+d < h; ++d)
65                                 {
66                                         if (a[4*(x + w*(y+d))] == 0)
67                                                 break;
68                                 }
69                                 
70                                 mean_dist += min(min(d,u), min(r,l));
71                         }
72                 }
73         }
74         printf("%d\t%d\t%d\t%lf\n", count_a, count_b, total_diff, (double)mean_dist / (double)count_b);
75 }

UCC git Repository :: git.ucc.asn.au