|
|
|
@ -7,9 +7,14 @@ |
|
|
|
|
|
|
|
|
|
int verbosity; |
|
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------- */ |
|
|
|
|
|
|
|
|
|
float global_fvalue; |
|
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------- */ |
|
|
|
|
#define OP_ADD 1 |
|
|
|
|
#define OP_SUB 2 |
|
|
|
|
#define OP_MIX 3 |
|
|
|
|
#define OP_MUL 4 |
|
|
|
|
typedef struct { |
|
|
|
|
int code; |
|
|
|
@ -19,6 +24,7 @@ typedef struct { |
|
|
|
|
Opcode opcodes[] = { |
|
|
|
|
{ OP_ADD, "add" }, |
|
|
|
|
{ OP_SUB, "sub" }, |
|
|
|
|
{ OP_MIX, "mix" }, |
|
|
|
|
{ OP_MUL, "mul" }, |
|
|
|
|
{ 0, NULL } |
|
|
|
|
}; |
|
|
|
@ -27,7 +33,7 @@ static void pr_opcodes(void) |
|
|
|
|
Opcode *optr; |
|
|
|
|
puts("operators:"); |
|
|
|
|
for (optr = opcodes; optr->code; optr++) { |
|
|
|
|
printf("\t%-20s %d\n", optr->op, optr->code);
|
|
|
|
|
printf("\t%-15s %d\n", optr->op, optr->code);
|
|
|
|
|
}
|
|
|
|
|
} |
|
|
|
|
static int look_opcode(char *txt) |
|
|
|
@ -52,6 +58,10 @@ static void help(int lj) |
|
|
|
|
|
|
|
|
|
puts("usage:\n\tfimgops [options] A.fimg B.fimg operator D.fimg"); |
|
|
|
|
pr_opcodes(); |
|
|
|
|
puts("options:"); |
|
|
|
|
puts("\t-g convert output to gray"); |
|
|
|
|
puts("\t-k N.N set float value"); |
|
|
|
|
puts("\t-v increase verbosity"); |
|
|
|
|
if (verbosity) fimg_print_version(1); |
|
|
|
|
exit(0); |
|
|
|
|
} |
|
|
|
@ -66,6 +76,11 @@ switch (action) { |
|
|
|
|
foo = fimg_add(A, B, D); break; |
|
|
|
|
case OP_SUB: |
|
|
|
|
foo = fimg_sub(A, B, D); break; |
|
|
|
|
case OP_MIX: |
|
|
|
|
if (verbosity) fprintf(stderr, "fvalue is %f\n", |
|
|
|
|
global_fvalue); |
|
|
|
|
foo = fimg_interpolate(A, B, D, global_fvalue); |
|
|
|
|
break; |
|
|
|
|
case OP_MUL: |
|
|
|
|
foo = fimg_add(A, B, D); break; |
|
|
|
|
default: |
|
|
|
@ -79,7 +94,6 @@ return foo; |
|
|
|
|
int main(int argc, char *argv[]) |
|
|
|
|
{ |
|
|
|
|
int foo, opt, action; |
|
|
|
|
float fvalue; |
|
|
|
|
char *operator; |
|
|
|
|
|
|
|
|
|
FloatImg srcA, srcB, dest; |
|
|
|
@ -87,7 +101,7 @@ FloatImg srcA, srcB, dest; |
|
|
|
|
while ((opt = getopt(argc, argv, "hk:v")) != -1) { |
|
|
|
|
switch(opt) { |
|
|
|
|
case 'h': help(0); break; |
|
|
|
|
case 'k': fvalue = atof(optarg); break; |
|
|
|
|
case 'k': global_fvalue = atof(optarg); break; |
|
|
|
|
case 'v': verbosity++; break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -141,7 +155,8 @@ foo = fimg_create(&dest, srcA.width, srcA.height, srcA.type); |
|
|
|
|
|
|
|
|
|
foo = exec_operator(&srcA, &srcB, action, &dest); |
|
|
|
|
if (foo) { |
|
|
|
|
fprintf(stderr, "operator exec give us a %d\n", foo); |
|
|
|
|
fprintf(stderr, "operator '%s' exec give us a %d\n", |
|
|
|
|
operator, foo); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foo = fimg_dump_to_file(&dest, argv[optind+3], 0); |
|
|
|
|