#include "img_merge.h"\r
#include "stdlib.h"\r
\r
-/* ----------------------------------------------- */\r
-void print_help(void) {\r
+void print_help(void) {/*{{{*/\r
\r
- printf("Usage: img_merge -p1 pic1 -c1 brightnes1 .. .. -s step -o outbasename\n");\r
+ printf("Usage: img_merge -p1 pic1 -c1 brightnes1 .. .. -s step -o outbasename\n");\r
\r
printf(" Usage: img_merge\n");\r
printf(" -n number of images to merge (1-999)\n");\r
printf("\n");\r
printf(" those p[n]s, what is not defined will be automatically\n");\r
printf(" set correspondingly as the last value. // later on!\n");\r
-}\r
-/* ----------------------------------------------- */\r
-void scan_args(int argc, char **argv) {\r
- int i, j, r, tmpint;\r
+}/*}}}*/\r
\r
- #if debug>1\r
- printf("* Debug * Arguments being processed\n");\r
- #endif\r
- for ( i=1 ; i<maxn ; i++ ) { // a little init.\r
- c[i]=100;\r
- }\r
+void scan_args(int argc, char **argv) {/*{{{*/\r
+ int i, j, r, tmpint;\r
\r
- for ( i = 1 ; i < argc ; i++ ) {\r
- switch( argv[i][0] ) {\r
- case '-':\r
- switch( argv[i][1] ) {\r
- case 'n':\r
- if ( argc > i + 1 && isdigit(argv[i+1][0]) ) {\r
- if ( num ) {\r
- printf("Only one -n parameter allowed!\n", num);\r
- exit(0);\r
- }\r
- if ( !p_base[0] ) {\r
- printf("You must give -p firstpic before -n!\n", num);\r
- exit(0);\r
- }\r
- num = atoi(&argv[i+1][0]);\r
- if ( num > maxn ) {\r
- printf("Then given -n parameter is over the maximun: %d\n", maxn);\r
- exit(0);\r
- }\r
- #if debug>1\r
- printf("* Debug * Found -n: %d\n", num);\r
- #endif\r
- i++;\r
- for ( j = 0 ; j < num ; j++ ) {\r
- sprintf(p[j+1], "%s", p_base);\r
- increment_str(p_base);\r
- }\r
- }\r
- break;\r
+ #if debug>1\r
+ printf("* Debug * Arguments being processed\n");\r
+ #endif\r
+ for ( i=1 ; i<maxn ; i++ ) { // a little init.\r
+ c[i]=100;\r
+ }\r
\r
- case 'p':\r
- if ( isdigit(argv[i][2]) ) {\r
- j = atoi(&argv[i][2]);\r
- sprintf(p[j], "%s", argv[i+1]);\r
- i++, num++;\r
- #if debug>1\r
- printf("* Debug * Found -p%d : %s\n", j, p[j]);\r
- #endif\r
- } else if ( argc>i+1 ) {\r
- sprintf(p_base, "%s", argv[i+1]);\r
- #if debug>1\r
- printf("* Debug * Found -p global: %s\n", argv[i+1]);\r
- #endif\r
- }\r
- break;\r
+ for ( i = 1 ; i < argc ; i++ ) {\r
+ switch( argv[i][0] ) {\r
+ case '-':\r
+ switch( argv[i][1] ) {\r
+ case 'n':\r
+ if ( argc > i + 1 && isdigit(argv[i+1][0]) ) {\r
+ if ( num ) {\r
+ printf("Only one -n parameter allowed!\n", num);\r
+ exit(0);\r
+ }\r
+ if ( !p_base[0] ) {\r
+ printf("You must give -p firstpic before -n!\n", num);\r
+ exit(0);\r
+ }\r
+ num = atoi(&argv[i+1][0]);\r
+ if ( num > maxn ) {\r
+ printf("Then given -n parameter is over the maximun: %d\n", maxn);\r
+ exit(0);\r
+ }\r
+ #if debug>1\r
+ printf("* Debug * Found -n: %d\n", num);\r
+ #endif\r
+ i++;\r
+ for ( j = 0 ; j < num ; j++ ) {\r
+ sprintf(p[j+1], "%s", p_base);\r
+ increment_str(p_base);\r
+ }\r
+ }\r
+ break;\r
\r
- case 'c':\r
- #if debug>1\r
- printf("* Debug * Found -c : ");\r
- #endif\r
- if ( isdigit(argv[i][2]) && argc>i+1 && isdigit(argv[i+1][0]) ) {\r
- #if debug>1\r
- printf("* Debug * Found -c%d : %d\n", atoi(&argv[i][2]), atoi(&argv[i+1][0]));\r
- #endif\r
- c[ atoi(&argv[i][2]) ] = atoi(&argv[i+1][0]), i++;\r
- } else if ( argc>i+1 && isdigit(argv[i+1][0]) ) {\r
- r = atoi( &argv[i+1][0] );\r
- for ( j = 0 ; j < maxn ; j++ ) { c[ j ] = r; };\r
- i++;\r
- #if debug>1\r
- printf("* Debug * Found -c for all numbers : %d\n", r);\r
- #endif\r
- } else if ( argc>i+1 && argv[i+1][0] == 'a' ) {\r
- c[0] = -1;\r
- i++;\r
- }\r
- break;\r
+ case 'p':\r
+ if ( isdigit(argv[i][2]) ) {\r
+ j = atoi(&argv[i][2]);\r
+ sprintf(p[j], "%s", argv[i+1]);\r
+ i++, num++;\r
+ #if debug>1\r
+ printf("* Debug * Found -p%d : %s\n", j, p[j]);\r
+ #endif\r
+ } else if ( argc>i+1 ) {\r
+ sprintf(p_base, "%s", argv[i+1]);\r
+ #if debug>1\r
+ printf("* Debug * Found -p global: %s\n", argv[i+1]);\r
+ #endif\r
+ }\r
+ break;\r
\r
- case 't':\r
- #if debug>1\r
- printf("* Debug * Found -t\n");\r
- #endif\r
- if ( argc>=i+1 ) {\r
- if ( argv[i+1][0] == 'S' || argv[i+1][0] == 's' ) {\r
- t = 0;\r
- } else if ( argv[i+1][0] == 'X' || argv[i+1][0] == 'x' ) {\r
- t = 1;\r
- } else if ( argv[i+1][0] == 'N' || argv[i+1][0] == 'n' ) {\r
- t = 2;\r
- } else if ( argv[i+1][0] == 'A' || argv[i+1][0] == 'a' ) {\r
- t = 3;\r
- } else if ( argv[i+1][0] == 'D' || argv[i+1][0] == 'd' ) {\r
- t = 4;\r
- } else {\r
- printf("Then given -t merge type (%s) is unknown!\n", &argv[i+1][0]);\r
- exit(0);\r
- }\r
- #if debug>1\r
- printf("* Debug * Found -t : %c\n", argv[i+1][0]);\r
- #endif\r
- }\r
- break;\r
+ case 'c':\r
+ #if debug>1\r
+ printf("* Debug * Found -c : ");\r
+ #endif\r
+ if ( isdigit(argv[i][2]) && argc>i+1 && isdigit(argv[i+1][0]) ) {\r
+ #if debug>1\r
+ printf("* Debug * Found -c%d : %d\n", atoi(&argv[i][2]), atoi(&argv[i+1][0]));\r
+ #endif\r
+ c[ atoi(&argv[i][2]) ] = atoi(&argv[i+1][0]), i++;\r
+ } else if ( argc>i+1 && isdigit(argv[i+1][0]) ) {\r
+ r = atoi( &argv[i+1][0] );\r
+ for ( j = 0 ; j < maxn ; j++ ) { c[ j ] = r; };\r
+ i++;\r
+ #if debug>1\r
+ printf("* Debug * Found -c for all numbers : %d\n", r);\r
+ #endif\r
+ } else if ( argc>i+1 && argv[i+1][0] == 'a' ) {\r
+ c[0] = -1;\r
+ i++;\r
+ }\r
+ break;\r
\r
- case 's':\r
- if ( isdigit(argv[i+1][0]) ) {\r
- #if debug>1\r
- printf("* Debug * Found -s : %d\n", atoi(&argv[i+1][0]));\r
- #endif\r
- step = atoi(&argv[i+1][0]), i++;\r
- }\r
- break;\r
+ case 't':\r
+ #if debug>1\r
+ printf("* Debug * Found -t\n");\r
+ #endif\r
+ if ( argc>=i+1 ) {\r
+ if ( argv[i+1][0] == 'S' || argv[i+1][0] == 's' ) {\r
+ t = 0;\r
+ } else if ( argv[i+1][0] == 'X' || argv[i+1][0] == 'x' ) {\r
+ t = 1;\r
+ } else if ( argv[i+1][0] == 'N' || argv[i+1][0] == 'n' ) {\r
+ t = 2;\r
+ } else if ( argv[i+1][0] == 'A' || argv[i+1][0] == 'a' ) {\r
+ t = 3;\r
+ } else if ( argv[i+1][0] == 'D' || argv[i+1][0] == 'd' ) {\r
+ t = 4;\r
+ } else {\r
+ printf("Then given -t merge type (%s) is unknown!\n", &argv[i+1][0]);\r
+ exit(0);\r
+ }\r
+ #if debug>1\r
+ printf("* Debug * Found -t : %c\n", argv[i+1][0]);\r
+ #endif\r
+ }\r
+ break;\r
\r
- case 'f':\r
- if ( isdigit(argv[i+1][0]) ) {\r
- #if debug>1\r
- printf("* Debug * Found -f : %d\n", atoi(&argv[i+1][0]));\r
- #endif\r
- framestep = atoi(&argv[i+1][0]), i++;\r
- }\r
- break;\r
+ case 's':\r
+ if ( isdigit(argv[i+1][0]) ) {\r
+ #if debug>1\r
+ printf("* Debug * Found -s : %d\n", atoi(&argv[i+1][0]));\r
+ #endif\r
+ step = atoi(&argv[i+1][0]), i++;\r
+ }\r
+ break;\r
\r
- case 'o':\r
- #if debug>1\r
- printf("* Debug * Found -o : %s\n",argv[i+1]);\r
- #endif\r
- sprintf(outbasename, "%s", argv[i+1]);\r
- i++;\r
- break;\r
- }\r
- break;\r
- case '?':\r
- print_help();\r
- break;\r
- default:\r
- break;\r
- }\r
- if ( c[0] == -1 && num > 0 ) {\r
- for ( j = 0 ; j < maxn ; j++ ) { c[ j ] = 100/num; };\r
- }\r
- }\r
- if (num<2) {\r
- print_help();\r
- exit(0);\r
- }\r
-}\r
-/* ----------------------------------------- */\r
-void merge_begin(uint8_t *img, int c) {\r
- int i,j,h3i,j3, pos;\r
+ case 'f':\r
+ if ( isdigit(argv[i+1][0]) ) {\r
+ #if debug>1\r
+ printf("* Debug * Found -f : %d\n", atoi(&argv[i+1][0]));\r
+ #endif\r
+ framestep = atoi(&argv[i+1][0]), i++;\r
+ }\r
+ break;\r
\r
- for( i = 0 ; i < w ; i++ ) {\r
- h3i = h * 3 * i;\r
- for( j = 0 ; j < h ; j++ ) {\r
- j3 = 3*j;\r
- pos = h3i + j3;\r
- outbuffer[pos+0] = c*img[pos+0];\r
- outbuffer[pos+1] = c*img[pos+1];\r
- outbuffer[pos+2] = c*img[pos+2];\r
- }\r
- }\r
-}\r
-/* ----------------------------------------- */\r
-void merge(uint8_t *img, int c) {\r
- int i,j,h3i,j3, pos;\r
+ case 'o':\r
+ #if debug>1\r
+ printf("* Debug * Found -o : %s\n",argv[i+1]);\r
+ #endif\r
+ sprintf(outbasename, "%s", argv[i+1]);\r
+ i++;\r
+ break;\r
+ }\r
+ break;\r
+ case '?':\r
+ print_help();\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ if ( c[0] == -1 && num > 0 ) {\r
+ for ( j = 0 ; j < maxn ; j++ ) { c[ j ] = 100 / num; };\r
+ }\r
+ }\r
+ if (num < 2) {\r
+ print_help();\r
+ exit(0);\r
+ }\r
+}/*}}}*/\r
\r
- for( i = 0 ; i < w ; i++ ) {\r
- h3i = h*3*i;\r
- for( j = 0 ; j < h ; j++ ) {\r
- j3 = 3 * j;\r
- pos = h3i + j3;\r
- if ( t == 1 ) { // max\r
- if ( c*img[pos+0] > outbuffer[pos+0] ) { outbuffer[pos+0] = c*img[pos+0]; }\r
- if ( c*img[pos+1] > outbuffer[pos+1] ) { outbuffer[pos+1] = c*img[pos+1]; }\r
- if ( c*img[pos+2] > outbuffer[pos+2] ) { outbuffer[pos+2] = c*img[pos+2]; }\r
- } else if ( t == 2 ) { // min\r
- if ( c*img[pos+0] < outbuffer[pos+0] ) { outbuffer[pos+0] = c*img[pos+0]; }\r
- if ( c*img[pos+1] < outbuffer[pos+1] ) { outbuffer[pos+1] = c*img[pos+1]; }\r
- if ( c*img[pos+2] < outbuffer[pos+2] ) { outbuffer[pos+2] = c*img[pos+2]; }\r
- } else if ( t == 4 ) { // diff\r
- if ( c*img[pos+0] != outbuffer[pos+0] ) { outbuffer[pos+0] += c*img[pos+0]; } else { outbuffer[pos+0] = 0; }\r
- if ( c*img[pos+1] != outbuffer[pos+1] ) { outbuffer[pos+1] += c*img[pos+1]; } else { outbuffer[pos+1] = 0; }\r
- if ( c*img[pos+2] != outbuffer[pos+2] ) { outbuffer[pos+2] += c*img[pos+2]; } else { outbuffer[pos+2] = 0; }\r
- } else {\r
- outbuffer[pos+0] += c*img[pos+0];\r
- outbuffer[pos+1] += c*img[pos+1];\r
- outbuffer[pos+2] += c*img[pos+2];\r
- }\r
- }\r
- }\r
-}\r
-/* ----------------------------------------- */\r
-void merge_finish(void) {\r
- int i,j,h3i,j3, pos;\r
+void merge_begin(uint8_t *img, int c) {/*{{{*/\r
+ int i,j,h3i,j3, pos;\r
\r
- for( i = 0 ; i < w ; i++ ) {\r
- h3i = h*3*i;\r
- for( j = 0 ; j < h ; j++ ) {\r
- j3 = 3 * j;\r
- pos = h3i + j3;\r
- if ( t == 3 ) { // avg\r
- outimage[pos+0] = (uint8_t) ( outbuffer[pos+2]/100/num <= 255 ? outbuffer[pos+2]/100/num : 255 );\r
- outimage[pos+1] = (uint8_t) ( outbuffer[pos+1]/100/num <= 255 ? outbuffer[pos+1]/100/num : 255 );\r
- outimage[pos+2] = (uint8_t) ( outbuffer[pos+0]/100/num <= 255 ? outbuffer[pos+0]/100/num : 255 );\r
- } else {\r
- outimage[pos+0] = (uint8_t) ( outbuffer[pos+2]/100 <= 255 ? outbuffer[pos+2]/100 : 255 );\r
- outimage[pos+1] = (uint8_t) ( outbuffer[pos+1]/100 <= 255 ? outbuffer[pos+1]/100 : 255 );\r
- outimage[pos+2] = (uint8_t) ( outbuffer[pos+0]/100 <= 255 ? outbuffer[pos+0]/100 : 255 );\r
- }\r
- }\r
- }\r
-}\r
-/* ----------------------------------------------- */\r
-void increment_str( char *p ) {\r
- int i;\r
+ for ( i = 0 ; i < w ; i++ ) {\r
+ h3i = h * 3 * i;\r
+ for ( j = 0 ; j < h ; j++ ) {\r
+ j3 = 3*j;\r
+ pos = h3i + j3;\r
+ outbuffer[pos+0] = c*img[pos+0];\r
+ outbuffer[pos+1] = c*img[pos+1];\r
+ outbuffer[pos+2] = c*img[pos+2];\r
+ }\r
+ }\r
+}/*}}}*/\r
\r
- for ( i = 0 ; p[i] != '\0' ; i++ );\r
- i-=5;\r
- while ( (++p[i]) == ('9'+1) ) {\r
- p[i] = '0';\r
- i--;\r
- }\r
-}\r
-/* ----------------------------------------------- */\r
-void increment(void) {\r
- int i,j;\r
+void merge(uint8_t *img, int c) {/*{{{*/\r
+ int i, j, h3i, j3, pos;\r
\r
- for ( i = 1 ; i < num + 1 ; i++ ) {\r
- for ( j = 0 ; p[i][j] != '\0' ; j++ );\r
- j -= 5;\r
- while ( (++p[i][j]) == ('9'+1) ) {\r
- p[i][j] = '0';\r
- j--;\r
- }\r
- }\r
-}\r
-/* ----------------------------------------- */\r
-/* ----------------------------------------- */\r
-/* ----------------------------------------- */\r
-int main(int argc, char **argv) {\r
- tga_image img1;\r
- tga_image img2;\r
- tga_result result;\r
- int i, j;\r
+ for ( i = 0 ; i < w ; i++ ) {\r
+ h3i = h * 3 * i;\r
+ for ( j = 0 ; j < h ; j++ ) {\r
+ j3 = 3 * j;\r
+ pos = h3i + j3;\r
+ if ( t == 1 ) { // max\r
+ if ( c*img[pos+0] > outbuffer[pos+0] ) { outbuffer[pos+0] = c*img[pos+0]; }\r
+ if ( c*img[pos+1] > outbuffer[pos+1] ) { outbuffer[pos+1] = c*img[pos+1]; }\r
+ if ( c*img[pos+2] > outbuffer[pos+2] ) { outbuffer[pos+2] = c*img[pos+2]; }\r
+ } else if ( t == 2 ) { // min\r
+ if ( c*img[pos+0] < outbuffer[pos+0] ) { outbuffer[pos+0] = c*img[pos+0]; }\r
+ if ( c*img[pos+1] < outbuffer[pos+1] ) { outbuffer[pos+1] = c*img[pos+1]; }\r
+ if ( c*img[pos+2] < outbuffer[pos+2] ) { outbuffer[pos+2] = c*img[pos+2]; }\r
+ } else if ( t == 4 ) { // diff\r
+ if ( c*img[pos+0] != outbuffer[pos+0] ) { outbuffer[pos+0] += c*img[pos+0]; } else { outbuffer[pos+0] = 0; }\r
+ if ( c*img[pos+1] != outbuffer[pos+1] ) { outbuffer[pos+1] += c*img[pos+1]; } else { outbuffer[pos+1] = 0; }\r
+ if ( c*img[pos+2] != outbuffer[pos+2] ) { outbuffer[pos+2] += c*img[pos+2]; } else { outbuffer[pos+2] = 0; }\r
+ } else {\r
+ outbuffer[pos+0] += c*img[pos+0];\r
+ outbuffer[pos+1] += c*img[pos+1];\r
+ outbuffer[pos+2] += c*img[pos+2];\r
+ }\r
+ }\r
+ }\r
+}/*}}}*/\r
\r
- scan_args(argc, argv);\r
+void merge_finish(void) {/*{{{*/\r
+ int i, j, h3i, j3, pos;\r
\r
- #if debug>1\r
- printf("* Debug * Checking first file:%s\n",p[1]);\r
- #endif\r
- result = tga_read(&tga_images[1], p[1]);\r
- if (result != TGA_NOERR) {\r
- printf("Error opening first file!\n");\r
- exit(0);\r
- }\r
- if (!tga_is_top_to_bottom(&tga_images[1])) tga_flip_vert(&tga_images[1]);\r
- w = tga_images[1].width;\r
- h = tga_images[1].height;\r
- #if debug>1\r
- printf("* Debug * Width:%d , Height:%d\n",w,h);\r
- #endif\r
- tga_free_buffers(&tga_images[1]);\r
+ for ( i = 0 ; i < w ; i++ ) {\r
+ h3i = h * 3 * i;\r
+ for ( j = 0 ; j < h ; j++ ) {\r
+ j3 = 3 * j;\r
+ pos = h3i + j3;\r
+ if ( t == 3 ) { // avg\r
+ outimage[pos+0] = (uint8_t) ( outbuffer[pos+2]/100/num <= 255 ? outbuffer[pos+2]/100/num : 255 );\r
+ outimage[pos+1] = (uint8_t) ( outbuffer[pos+1]/100/num <= 255 ? outbuffer[pos+1]/100/num : 255 );\r
+ outimage[pos+2] = (uint8_t) ( outbuffer[pos+0]/100/num <= 255 ? outbuffer[pos+0]/100/num : 255 );\r
+ } else {\r
+ outimage[pos+0] = (uint8_t) ( outbuffer[pos+2]/100 <= 255 ? outbuffer[pos+2]/100 : 255 );\r
+ outimage[pos+1] = (uint8_t) ( outbuffer[pos+1]/100 <= 255 ? outbuffer[pos+1]/100 : 255 );\r
+ outimage[pos+2] = (uint8_t) ( outbuffer[pos+0]/100 <= 255 ? outbuffer[pos+0]/100 : 255 );\r
+ }\r
+ }\r
+ }\r
+}/*}}}*/\r
\r
- outimage = (uint8_t*) malloc( w*h*3*sizeof(uint8_t) );\r
- outbuffer = (int*) malloc( w*h*3*sizeof(int) );\r
+void increment_str(char *p) {/*{{{*/\r
+ int i;\r
\r
- while(step) {\r
- for ( i = 1 ; i < num + 1 ; i += framestep ) {\r
- result = tga_read(&tga_images[i], p[i]);\r
- if (result == TGA_NOERR) {\r
- if (!tga_is_top_to_bottom(&tga_images[i])) tga_flip_vert(&tga_images[i]);\r
- if (!( tga_images[i].width==w && tga_images[i].height==h )) {\r
- printf("Not identical dimensions!\n");\r
- exit(0);\r
- }\r
- image_datas[i] = tga_images[i].image_data;\r
- if ( i == 1 ) {\r
- merge_begin(image_datas[i], c[i]);\r
- } else {\r
- merge(image_datas[i], c[i]);\r
- }\r
- #if debug>1\r
- printf("* Debug * Image merged:%s - %d%%\n",p[i],c[i]);\r
- #endif\r
- tga_free_buffers(&tga_images[i]);\r
- } else {\r
- printf("Error opening image:%s!\n",p[i]);\r
- exit(0);\r
- }\r
- }\r
- merge_finish();\r
- sprintf(outname,"%s%05d.tga",outbasename,outindex++);\r
- tga_write_rgb(outname, (uint8_t *) outimage, w, h, 24);\r
- #if debug>1\r
- printf("* Debug * Image writen:%s\n",outname);\r
- #endif\r
- for ( j = 0 ; j < step ; j++ ) { increment(); }\r
- }\r
+ for ( i = 0 ; p[i] != '\0' ; i++ );\r
+ i -= 5;\r
+ while ( (++p[i]) == ('9'+1) ) {\r
+ p[i] = '0';\r
+ i--;\r
+ }\r
+}/*}}}*/\r
\r
- free(outimage);\r
- free(outbuffer);\r
+void increment(void) {/*{{{*/\r
+ int i, j;\r
\r
- return 0;\r
-}\r
+ for ( i = 1 ; i < num + 1 ; i++ ) {\r
+ for ( j = 0 ; p[i][j] != '\0' ; j++ );\r
+ j -= 5;\r
+ while ( (++p[i][j]) == ('9' + 1) ) {\r
+ p[i][j] = '0';\r
+ j--;\r
+ }\r
+ }\r
+}/*}}}*/\r
+\r
+int main(int argc, char **argv) {/*{{{*/\r
+ tga_image img1;\r
+ tga_image img2;\r
+ tga_result result;\r
+ int i, j;\r
+\r
+ scan_args(argc, argv);\r
+\r
+ #if debug>1\r
+ printf("* Debug * Checking first file:%s\n",p[1]);\r
+ #endif\r
+ result = tga_read(&tga_images[1], p[1]);\r
+ if (result != TGA_NOERR) {\r
+ printf("Error opening first file!\n");\r
+ exit(0);\r
+ }\r
+ if (!tga_is_top_to_bottom(&tga_images[1])) tga_flip_vert(&tga_images[1]);\r
+ w = tga_images[1].width;\r
+ h = tga_images[1].height;\r
+ #if debug>1\r
+ printf("* Debug * Width:%d , Height:%d\n",w,h);\r
+ #endif\r
+ tga_free_buffers(&tga_images[1]);\r
+\r
+ outimage = (uint8_t*) malloc( w*h*3*sizeof(uint8_t) );\r
+ outbuffer = (int*) malloc( w*h*3*sizeof(int) );\r
+\r
+ while(step) {\r
+ for ( i = 1 ; i < num + 1 ; i += framestep ) {\r
+ result = tga_read(&tga_images[i], p[i]);\r
+ if (result == TGA_NOERR) {\r
+ if (!tga_is_top_to_bottom(&tga_images[i])) tga_flip_vert(&tga_images[i]);\r
+ if (!( tga_images[i].width==w && tga_images[i].height==h )) {\r
+ printf("Not identical dimensions!\n");\r
+ exit(0);\r
+ }\r
+ image_datas[i] = tga_images[i].image_data;\r
+ if ( i == 1 ) {\r
+ merge_begin(image_datas[i], c[i]);\r
+ } else {\r
+ merge(image_datas[i], c[i]);\r
+ }\r
+ #if debug>1\r
+ printf("* Debug * Image merged:%s - %d%%\n",p[i],c[i]);\r
+ #endif\r
+ tga_free_buffers(&tga_images[i]);\r
+ } else {\r
+ printf("Error opening image:%s!\n",p[i]);\r
+ exit(0);\r
+ }\r
+ }\r
+ merge_finish();\r
+ sprintf(outname,"%s%05d.tga",outbasename,outindex++);\r
+ tga_write_rgb(outname, (uint8_t *) outimage, w, h, 24);\r
+ #if debug>1\r
+ printf("* Debug * Image writen:%s\n",outname);\r
+ #endif\r
+ for ( j = 0 ; j < step ; j++ ) { increment(); }\r
+ }\r
+\r
+ free(outimage);\r
+ free(outbuffer);\r
+\r
+ return 0;\r
+}/*}}}*/\r