Browse Source

+ util.c : -C option

master v0.1
Alex 'AdUser' Z 11 years ago
parent
commit
5890791bce
  1. 33
      src/util.c

33
src/util.c

@ -29,6 +29,7 @@ void usage(int exitcode) {
); );
printf("\n" printf("\n"
" -B <num> Show bitmap for this sample\n" " -B <num> Show bitmap for this sample\n"
" -C <a>,<b> Show difference percent for this samples\n"
" -D <a>,<b> Show difference bitmap for this samples\n" " -D <a>,<b> Show difference bitmap for this samples\n"
" -S <num> Search for images similar ot this sample\n" " -S <num> Search for images similar ot this sample\n"
" -U <num> Show db usage map, <num> entries per column\n" " -U <num> Show db usage map, <num> entries per column\n"
@ -145,11 +146,12 @@ int rec_bitmap(db_t *db, rec_t *sample)
return 0; return 0;
} }
int rec_diffmap(db_t *db, unsigned long a, unsigned long b) int rec_diff(db_t *db, unsigned long a, unsigned long b, unsigned short int showmap)
{ {
rec_t src; rec_t src;
rec_t dst; rec_t dst;
unsigned char diff[BITMAP_SIZE]; float diff = 0.0;
unsigned char map[BITMAP_SIZE];
uint16_t row; uint16_t row;
uint8_t i, j; uint8_t i, j;
@ -177,10 +179,17 @@ int rec_diffmap(db_t *db, unsigned long a, unsigned long b)
return 0; return 0;
} }
bitmap_diffmap(&diff[0], src.data + OFF_BITMAP, dst.data + OFF_BITMAP); if (showmap == 0) {
diff = (float) bitmap_compare(&src.data[OFF_BITMAP], &dst.data[OFF_BITMAP]);
diff /= BITMAP_BITS;
printf("%.2f%%\n", diff * 100);
return 0;
}
bitmap_diffmap(&map[0], src.data + OFF_BITMAP, dst.data + OFF_BITMAP);
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
row = *(((uint16_t *) diff) + i); row = *(((uint16_t *) map) + i);
for (j = 0; j < 16; j++) { for (j = 0; j < 16; j++) {
putchar((row & 1) == 1 ? '1' : '0'); putchar((row & 1) == 1 ? '1' : '0');
row >>= 1; row >>= 1;
@ -193,10 +202,10 @@ int rec_diffmap(db_t *db, unsigned long a, unsigned long b)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
enum { undef, search, bitmap, usage_map, diffmap } mode = undef; enum { undef, search, bitmap, usage_map, diff } mode = undef;
const char *db_path = NULL; const char *db_path = NULL;
float tresh = 0.10; float tresh = 0.10;
unsigned short int cols = 64; unsigned short int cols = 64, map = 0;
db_t db; db_t db;
rec_t sample; rec_t sample;
unsigned long a, b; unsigned long a, b;
@ -209,7 +218,7 @@ int main(int argc, char **argv)
if (argc < 3) if (argc < 3)
usage(EXIT_FAILURE); usage(EXIT_FAILURE);
while ((opt = getopt(argc, argv, "b:t:B:D:S:U:")) != -1) { while ((opt = getopt(argc, argv, "b:t:B:C:D:S:U:")) != -1) {
switch (opt) { switch (opt) {
case 'b' : case 'b' :
db_path = optarg; db_path = optarg;
@ -223,7 +232,9 @@ int main(int argc, char **argv)
sample.num = atoll(optarg); sample.num = atoll(optarg);
break; break;
case 'D' : case 'D' :
mode = diffmap; map = 1;
case 'C' :
mode = diff;
if ((c = strchr(optarg, ',')) == NULL) if ((c = strchr(optarg, ',')) == NULL)
usage(EXIT_FAILURE); usage(EXIT_FAILURE);
a = atoll(optarg); a = atoll(optarg);
@ -248,7 +259,7 @@ int main(int argc, char **argv)
if ((mode == search || mode == bitmap) && sample.num <= 0) if ((mode == search || mode == bitmap) && sample.num <= 0)
usage(EXIT_FAILURE); usage(EXIT_FAILURE);
if (mode == diffmap && (a <= 0 || b <= 0)) if (mode == diff && (a <= 0 || b <= 0))
usage(EXIT_FAILURE); usage(EXIT_FAILURE);
if (db_open(&db, db_path) == -1) { if (db_open(&db, db_path) == -1) {
@ -265,8 +276,8 @@ int main(int argc, char **argv)
if (mode == usage_map) if (mode == usage_map)
db_usage_map(&db, cols); db_usage_map(&db, cols);
if (mode == diffmap) if (mode == diff)
rec_diffmap(&db, a, b); rec_diff(&db, a, b, map);
db_close(&db); db_close(&db);

Loading…
Cancel
Save