From 99c3ee11668f897575460180317e98d7902b832c Mon Sep 17 00:00:00 2001 From: tth Date: Mon, 27 Jun 2022 23:39:52 +0200 Subject: [PATCH] six more tools added... --- .gitignore | 6 ++ Tools/Makefile | 27 +++++- Tools/fonctions.c | 4 + Tools/genplot2.c | 180 +++++++++++++++++++++++++++++++++++++++ Tools/tga_applymap.c | 92 ++++++++++++++++++++ Tools/tga_dither.c | 145 ++++++++++++++++++++++++++++++++ Tools/tga_makehf15.c | 55 ++++++++++++ Tools/tga_mires.c | 196 +++++++++++++++++++++++++++++++++++++++++++ Tools/tga_outils.h | 2 +- Tools/tga_remap.c | 117 ++++++++++++++++++++++++++ build.sh | 2 + 11 files changed, 822 insertions(+), 4 deletions(-) create mode 100644 Tools/genplot2.c create mode 100644 Tools/tga_applymap.c create mode 100644 Tools/tga_dither.c create mode 100644 Tools/tga_makehf15.c create mode 100644 Tools/tga_mires.c create mode 100644 Tools/tga_remap.c diff --git a/.gitignore b/.gitignore index 7e55663..8b34d1b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,8 +10,14 @@ Lib/testtga Lib/t_t16x24 Tools/tga_cadre +Tools/tga_dither Tools/tga_tools Tools/tga_effects Tools/tga_filtres +Tools/tga_remap Tools/tga_television +Tools/genplot2 +Tools/tga_applymap +Tools/tga_makehf15 +Tools/tga_mires diff --git a/Tools/Makefile b/Tools/Makefile index c1124af..d825410 100644 --- a/Tools/Makefile +++ b/Tools/Makefile @@ -6,10 +6,11 @@ include ../Paramakes.mk -DEPS = ../tthimage.h Makefile +DEPS = ../tthimage.h Makefile tga_outils.h -all: tga_cadre tga_effects tga_filtres tga_tools \ - tga_television +all: tga_cadre tga_effects tga_filtres tga_remap tga_tools \ + tga_television tga_dither tga_applymap tga_makehf15 \ + tga_mires #----------------------------------------------------------------- @@ -18,15 +19,35 @@ fonctions.o: fonctions.c $(DEPS) #----------------------------------------------------------------- +genplot2: genplot2.c $(DEPS) fonctions.o + gcc $(CFLAGS) $< ../libimage.a fonctions.o -lm -o $@ + +#----------------------------------------------------------------- + +tga_applymap: tga_applymap.c $(DEPS) fonctions.o + gcc $(CFLAGS) $< ../libimage.a fonctions.o -lm -o $@ + tga_cadre: tga_cadre.c $(DEPS) fonctions.o gcc $(CFLAGS) $< ../libimage.a fonctions.o -lm -o $@ +tga_dither: tga_dither.c $(DEPS) fonctions.o + gcc $(CFLAGS) $< ../libimage.a fonctions.o -lm -o $@ + tga_effects: tga_effects.c $(DEPS) fonctions.o gcc $(CFLAGS) $< ../libimage.a fonctions.o -lm -o $@ tga_filtres: tga_filtres.c $(DEPS) fonctions.o gcc $(CFLAGS) $< ../libimage.a fonctions.o -lm -o $@ +tga_makehf15: tga_makehf15.c $(DEPS) fonctions.o + gcc $(CFLAGS) $< ../libimage.a fonctions.o -lm -o $@ + +tga_mires: tga_mires.c $(DEPS) fonctions.o + gcc $(CFLAGS) $< ../libimage.a fonctions.o -lm -o $@ + +tga_remap: tga_remap.c $(DEPS) fonctions.o + gcc $(CFLAGS) $< ../libimage.a fonctions.o -lm -o $@ + tga_television: tga_television.c $(DEPS) fonctions.o gcc $(CFLAGS) $< ../libimage.a fonctions.o -lm -o $@ diff --git a/Tools/fonctions.c b/Tools/fonctions.c index 1baaed0..1693300 100644 --- a/Tools/fonctions.c +++ b/Tools/fonctions.c @@ -90,6 +90,8 @@ int parse_int_param(char *str, int *pval, int k) long lfoo; int val; +if (k) fprintf(stderr, "%s: k %d\n", __func__, k); + val = (int)(lfoo = strtol(str, NULL, 0)); #if DEBUG_LEVEL @@ -408,6 +410,8 @@ int set_new_seed(int k) char *ptr; long seed; +if (k) fprintf(stderr, "%s: k %d\n", __func__, k); + if (NULL==(ptr=getenv("FIXED_SEED"))) { /* no fixed seed in context, doing semi-random */ srand(getpid()); diff --git a/Tools/genplot2.c b/Tools/genplot2.c new file mode 100644 index 0000000..8d0246d --- /dev/null +++ b/Tools/genplot2.c @@ -0,0 +1,180 @@ +/* + Bon, c'est tres bien tout c,a mais il faudrait + faire une page de man pour expliquer comment + ce machin fonctionne... +*/ + +#include +#include + +#include "tga_outils.h" + +#define XMIN 0 +#define YMIN 0 +#define XMAX 4096 /* constant from a 'dddd' */ +#define YMAX 4096 /* constant from a 'dddd' */ + +/*::------------------------------------------------------------------::*/ +static Image_Desc *image; +static RGB_map map; +static int curX, curY; +/*::------------------------------------------------------------------::*/ +int initgr(int largeur, int hauteur) +{ +int foo, r, v, b, dummy; + +if ((image=Image_alloc(largeur, hauteur, 3))==NULL) + { + fprintf(stderr, "hu hu, 'man addswap' :)\n"); + exit(3); + } + +printf("\n\tinitgr %d %d\n", largeur, hauteur); +for (foo=0; foo<8; foo++) + { + printf("\tPal(%d) = ", foo); + r = foo & 1 ? 255 : 0; + v = foo & 2 ? 255 : 0; + b = foo & 4 ? 255 : 0; + printf("%02X %02X %02X\n", r, v, b); + map.red[foo] = r; + map.green[foo] = v; + map.blue[foo] = b; + } +map.nbre = 8; + +return 0; +} +/*::------------------------------------------------------------------::*/ +int move(int x, int y) +{ +#if DEBUG_LEVEL +printf("\tMOVE %5d %5d\n", x, y); +#endif +curX = x; curY = y; +return 0; +} + +int draw(int x, int y, int color) +{ +RGBA rgba; +int idx; + +#if DEBUG_LEVEL +printf("\tDRAW %5d %5d to %5d %5d\n", curX, curY, x, y); +#endif + +idx = color % 8; +if (idx != color) { + fprintf(stderr, "%s %s : color %d out of range\n", + __FILE__, __func__, color); + } +rgba.r = map.red[color]; +rgba.g = map.green[color]; +rgba.b = map.blue[color]; +Image_draw_line(image, curX, curY, x, y, &rgba); +curX = x; curY = y; +return 0; +} +/*::------------------------------------------------------------------::*/ +int endgr(char *filename) +{ + +fprintf(stderr, "saving '%s'\n", filename); +Image_TGA_save(filename, image, 0); + +return 0; +} +/*::------------------------------------------------------------------::*/ +int main(int argc, char *argv[]) +{ +char *filename, *image; +FILE *fp; +double x, y, xmin, ymin, xmax, ymax; +double fx, fy, f, X, Y; +double xC, yC, XC, YC, c1, c2; + +int v, nbp; + +/*---------- processing command line arguments */ + +if (argc<=1) filename = "a.scratch"; +else filename = argv[1]; + +if (argc<=2) image = "image.tga"; +else image = argv[2]; + +fprintf(stderr, "*** Genplot2 v 1.0.4 [%s] (dwtfywl) 1995,2010 TontonTh \n", + TGA_OUTILS_VERSION); + +/*----------- giving to the yuser some useless informations --- */ + +fprintf(stderr, "hardcoded picsize : %d %d\n", XMAX, YMAX); + +/*----------- opening input file and getting MIN and MAX values */ + +if ((fp = fopen(filename, "r"))==NULL) + { + perror("fichier d'entree"); + exit(1); + } + +nbp = 0; +xmin = 9999999; xmax = -9999999; +ymin = 9999999; ymax = -9999999; +while ( fscanf(fp, "%lf %lf %d", &x, &y, &v) == 3 ) + { + nbp++; + + if (x > xmax) xmax = x; + if (x < xmin) xmin = x; + + if (y > ymax) ymax = y; + if (y < ymin) ymin = y; + + } +fclose(fp); + +if (nbp == 0) + { + fprintf(stderr, "omg, I'v found _ZERO_ points for plotting...\n"); + exit(2); + } + +fprintf(stderr, "Genplot2: found %d points\n", nbp); + +/*---------- computing coefficients (temporary hack !-) */ + +fx = (XMAX-XMIN-1)/(xmax-xmin); +fy = (YMAX-YMIN-1)/(ymax-ymin); +fprintf(stderr, "\nfc = %12f fy = %12f\n", fx, fy); +f = (fx +#include +#include + +#include "tga_outils.h" + +/*::------------------------------------------------------------------::*/ +void usage(int flag) +{ +fprintf(stderr, "* tga_applymap v 0.0.14 [%s] (dwtfywl) Krabulator 1910\n", + TGA_OUTILS_VERSION); +fprintf(stderr, "Usage: tga_applymap M src.tga color.map dst.tga\n"); +fprintf(stderr, " M is 1 or 2\n"); +Image_print_version(0); +exit(5); +} +/*::------------------------------------------------------------------::*/ +int main(int argc, char *argv[]) +{ +Image_Desc *src, *dst; +int foo; +RGB_map map; + +dump_command_line(argc, argv, 0); + +if (argc==2 && !strcmp(argv[1], "-?")) usage(1); + +if (argc != 5) usage(0); + +if ( (src=Image_TGA_alloc_load(argv[2])) == NULL ) + { + fprintf(stderr, "can't load '%s'\n", argv[2]); + exit(1); + } + +if ( (foo=Image_load_color_Map(argv[3], "map", &map)) ) + { + fprintf(stderr, "%s: %s: err%d %s\n", argv[0], argv[3], + foo, Image_err2str(foo)); + exit(1); + } + +if (must_be_verbose()) + { + fprintf(stderr, "il y a %d couleurs dans la palette '%s'\n", + map.nbre, argv[3]); + } + +if ( (dst=Image_clone(src, 0))==NULL ) + { + fprintf(stderr, "can't clone %p, exiting...\n", src); + exit(2); + } + +/* ----------- */ +switch (argv[1][0]) + { + default: + case '1': + foo=Image_apply_Map(src, dst, &map); + break; + case '2': + foo=Image_gray_Map(src, dst, &map); + break; + case '3': + fprintf(stderr, "Not implemented\n"); + exit(5); + } +/* ----------- */ + +if (foo) + { + fprintf(stderr, "%s: apply map: erreur %d: %s\n", + argv[0], foo, Image_err2str(foo)); + } + +foo = Image_TGA_save(argv[4], dst, 0); +if (foo) + { + fprintf(stderr, "%s: TGA_save: err #%d\n\t\t %s\n", + argv[0], foo, Image_err2str(foo)); + exit(1); + } + +fprintf(stderr, "apply map ok\n"); +exit (0); +} +/*::------------------------------------------------------------------::*/ diff --git a/Tools/tga_dither.c b/Tools/tga_dither.c new file mode 100644 index 0000000..d1450c5 --- /dev/null +++ b/Tools/tga_dither.c @@ -0,0 +1,145 @@ +/* + ---------------------------------------------- + utilitaire pour ditherizer (uh?) une image + ---------------------------------------------- + http://krabulator.free.fr/devel/libimage.html + ---------------------------------------------- +*/ + +#include +#include +#include + +#include "tga_outils.h" + +/*::------------------------------------------------------------------::*/ +#define DI_2X2 2 +#define DI_3X3_0 11 +#define DI_3X3_1 12 +#define DI_BAYER0 16 +#define DI_ATKINSON 18 +#define DI_CRUDE 30 +#define DI_DBLTR 38 +#define DI_ERROR 45 +#define DI_RANDOM 60 +#define DI_BYR8RND 70 +#define DI_XPER 100 + +mot_clef mots_clef[] = +{ +{ "2x2", DI_2X2, "", "not working" }, +{ "3x3_0", DI_3X3_0, "", "" }, +{ "3x3_1", DI_3X3_1, "", "" }, +{ "bayer0", DI_BAYER0, "", "" }, +{ "atkinson", DI_ATKINSON, "i", "mmmm ?" }, +{ "crude", DI_CRUDE, "i", "" }, +{ "dbltresh", DI_DBLTR, "ii", "hi & low tresholds" }, +{ "error", DI_ERROR, "", "simple err diffusion" }, +{ "random", DI_RANDOM, "i", "random treshold" }, +{ "byr8rnd", DI_BYR8RND, "ii", "new 29 nov 2013" }, +{ "xper", DI_XPER, "i", "param: 1..254" }, +{ NULL, 0, NULL, NULL } +}; + +/*::------------------------------------------------------------------::*/ +void usage(int flag) +{ +fprintf(stderr, "* tga_dither v 0.0.26 [%s] (dwtfywl 2022) tTh\n", + TGA_OUTILS_VERSION); +fprintf(stderr, "usage:\n\ttga_dither avant.tga mode avant.tga [params]\n"); +if (flag) + liste_mots_clefs(mots_clef, 42); +else + Image_print_version(0); +exit(5); +} +/*::------------------------------------------------------------------::*/ +int main (int argc, char *argv[]) +{ +Image_Desc *src, *dst; +int foo; +int commande, nbargs, idx; + +dump_command_line(argc, argv, 0); + +if ( argc==2 && !strcmp(argv[1], "list") ) usage(1); +if ( argc < 4) usage(0); + +idx = cherche_mot_clef(argv[2], mots_clef, &commande, &nbargs); +if (idx < 0) + { + fprintf(stderr, "tga_dither: keyword %s unknow.\n", argv[2]); + exit(5); + } + +#if DEBUG_LEVEL +fprintf(stderr, "idx %d commande %d nbargs %d argc %d\n", + idx, commande, nbargs, argc); +#endif + +foo = parse_parametres(argc, argv, mots_clef[idx].ptypes, 4); + +if ( (src=Image_TGA_alloc_load(argv[1])) == NULL ) + { + fprintf(stderr, "tga_dither: err load %s\n", argv[1]); + exit(5); + } +if ( (dst=Image_clone(src, 1)) == NULL ) + { + fprintf(stderr, "no mem for image cloning\n"); + exit(5); + } + +switch (commande) + { + case DI_2X2: + foo = Image_dither_2x2(src, dst, 255); + break; + case DI_3X3_0: + foo = Image_dither_3x3_0(src, dst, 127); + break; + case DI_3X3_1: + foo = Image_dither_3x3_1(src, dst, 255); + break; + case DI_BAYER0: + foo = Image_dither_Bayer_0(src, dst, 255); + break; + case DI_ATKINSON: + foo = Image_dither_atkinson(src, dst, 255); + break; + case DI_CRUDE: + foo = Image_dither_crude(src, dst, GIP(0)); + break; + case DI_DBLTR: + foo = Image_dither_double_seuil(src, dst, GIP(0), GIP(1), 255); + break; + case DI_ERROR: + foo = Image_dither_simple_error(src, dst, 255); + break; + case DI_RANDOM: + foo = Image_dither_seuil_random(src, dst, 255); + break; + case DI_BYR8RND: + srand(getpid()); + foo = Image_dither_bayer8x8rnd(src, dst, GIP(0), GIP(1)); + break; + case DI_XPER: + foo = Image_dither_3x3_1(src, dst, GIP(0)); + break; + default: + fprintf(stderr, "dithering method not implemented\n"); + foo=-1; + break; + } + +#if DEBUG_LEVEL +if (foo) + fprintf(stderr, "dither %d retour = %d, %s\n", commande, + foo, Image_err2str(foo)); +#endif + +foo = Image_TGA_save(argv[3], dst, 0); + +return 0; +} +/*::------------------------------------------------------------------::*/ diff --git a/Tools/tga_makehf15.c b/Tools/tga_makehf15.c new file mode 100644 index 0000000..6897439 --- /dev/null +++ b/Tools/tga_makehf15.c @@ -0,0 +1,55 @@ +/* + convert a TGA image to a POVRAY height_field + ---------------------------------------------------- + + This operation is also implemented in 'povhf_tools' (dec 2009) +*/ + +#include +#include + +#include "tga_outils.h" + +/*::------------------------------------------------------------------::*/ +void usage() +{ +fprintf(stderr, "* tga_makehf15 v 0.0.6 [%s] (dwtfywl) tontonTh\n", + TGA_OUTILS_VERSION); +fprintf(stderr, "Usage:\n\ttga_makehf15 source.tga hf.tga\n"); +fprintf(stderr, "\tno parameters, no options... but stay tuned :)\n\n"); +Image_print_version(0); +exit(5); +} +/*::------------------------------------------------------------------::*/ +int main (int argc, char *argv[]) +{ +Image_Desc *img, *hf15; +int foo; + +dump_command_line(argc, argv, 0); + +if (argc != 3) usage(); + +if ( (img=Image_TGA_alloc_load(argv[1]))==NULL ) + { + fprintf(stderr, "can't load '%s'\n", argv[1]); + exit(5); + } + +if ( (hf15=Image_clone(img, 0))==NULL ) + { + fprintf(stderr, "can't clone %p\n", img); + exit(5); + } + +/* + * et c'est quoi le paramètre qui est à 0 ? + */ +foo = Image_hf15_rgb2hf(img, hf15, 0); +Image_print_error("hf15 rgb2hf", foo); + +foo = Image_TGA_save(argv[2], hf15, 0); + +return 0; +} +/*::------------------------------------------------------------------::*/ diff --git a/Tools/tga_mires.c b/Tools/tga_mires.c new file mode 100644 index 0000000..452935e --- /dev/null +++ b/Tools/tga_mires.c @@ -0,0 +1,196 @@ +/* + FABRIQUEUR DE MIRES + =================== + + http://krabulator.free.fr/devel/libimage.html +*/ + +#include +#include +#include + +#include "tga_outils.h" + +/*::------------------------------------------------------------------::*/ +#define MIRCOL0 2 +#define MIRCOL1 3 +#define MIRCOL2 4 +#define MIRCOL3 5 +#define MIRCOL4 6 +#define DECOMP 10 +#define RGB0 14 +#define RGBSTRIP 15 /* mmmm, c'est quoi ? */ +#define GRAY0 16 +#define FNT16X24 20 + +mot_clef mots_clef[] = +{ +{ "mircol0", MIRCOL0, "s", "free text" }, +{ "mircol1", MIRCOL1, "s", "texte libre" }, +{ "mircol2", MIRCOL2, "iis", "dims & free text" }, +{ "mircol3", MIRCOL3, "iiis", "dims, flag & free text" }, +{ "mircol4", MIRCOL4, "iiis", "dims, flag & free text" }, +{ "decomp", DECOMP, "", "mysterious operation" }, +{ "rgb0", RGB0, "", "" }, +{ "gray0", GRAY0, "i", "param: height" }, +{ "fnt16x24", FNT16X24, "s", "param: font name" }, +{ NULL, 0, NULL, NULL } +}; + +/*::------------------------------------------------------------------::*/ +void usage(int flag) +{ +fprintf(stderr, "* tga_mires v 0.0.24 [%s] (dwtfywl 2015) tonton Th\n", + TGA_OUTILS_VERSION); +fprintf(stderr, "usage:\n\ttga_mires type image.tga [params]\n"); +if (flag) + liste_mots_clefs(mots_clef, 42); +else + Image_print_version(0); +exit(5); +} +/*::------------------------------------------------------------------::*/ +/* code selon ma methode de la rache le 25 avril 2007 */ +int +mire_grise(Image_Desc *img) +{ +int x, y; + +if (256 != img->width) abort(); + +for (x=0; x<256; x++) + for (y=0; yheight; y++) + Image_plotRGB(img, x, y, x, x, x); + +return 0; +} +/*::------------------------------------------------------------------::*/ +int do_mircol_2(Image_Desc *img, char *texte) +{ +int foo; +foo = Image_mircol_2(img, texte, 0); +return foo; +} +/*::------------------------------------------------------------------::*/ +int do_mircol_3(Image_Desc *img, char *texte, int mode) +{ +int foo; +fprintf(stderr, "%s : mode is %d\n", __func__, mode); +foo = Image_mircol_3(img, texte, mode); +return foo; +} +/*::------------------------------------------------------------------::*/ +int do_mircol_4(Image_Desc *img, char *texte, int mode) +{ +int foo; +fprintf(stderr, "%s : mode is %d\n", __func__, mode); +foo = Image_mircol_4(img, texte, mode); +return foo; +} +/*::------------------------------------------------------------------::*/ +int main (int argc, char *argv[]) +{ +Image_Desc *dst; +int foo; +int commande, nbargs, idx; +char *cptr, *argument; +int width, height; + +dump_command_line(argc, argv, 0); + +if ( argc==2 && !strcmp(argv[1], "list") ) usage(1); +if ( argc < 3) usage(0); + +idx = cherche_mot_clef(argv[1], mots_clef, &commande, &nbargs); +if (idx < 0) + { + fprintf(stderr, "tga_mires: mot-clef %s inconnu...\n", argv[1]); + exit(5); + } +#if DEBUG_LEVEL +fprintf(stderr, "idx %d commande %d nbargs %d argc %d\n", + idx, commande, nbargs, argc); +#endif + +foo = parse_parametres(argc, argv, mots_clef[idx].ptypes, 3); +#if DEBUG_LEVEL +print_parametres(); +#endif + +dst = NULL; + +switch (commande) + { + case MIRCOL0: + dst = Image_alloc(512, 512, 3); + foo = Image_mircol_0(dst, GSP(0), 0); + break; + case MIRCOL1: + dst = Image_alloc(512, 512, 3); + foo = Image_mircol_1(dst, GSP(0), 0); + break; + case MIRCOL2: + width = GIP(0); + height = GIP(1); + fprintf(stderr, "mircol2 sur %dx%d\n", width, height); + dst = Image_alloc(width, height, 3); + foo = do_mircol_2(dst, GSP(2)); + break; + case MIRCOL3: + width = GIP(0); + height = GIP(1); +#if DEBUG_LEVEL + fprintf(stderr, "mircol3 sur %dx%d\n", width, height); +#endif + dst = Image_alloc(width, height, 3); + foo = do_mircol_3(dst, GSP(3), GIP(2)); + break; + case MIRCOL4: + width = GIP(0); + height = GIP(1); + fprintf(stderr, "mircol4 sur %dx%d\n", width, height); + dst = Image_alloc(width, height, 3); + foo = do_mircol_3(dst, GSP(3), GIP(2)); + break; + case RGB0: + dst = Image_alloc(256, 256, 3); + foo = Image_mirRGB_0(dst, 0); + break; + case GRAY0: + foo = GIP(0); + fprintf(stderr, "hauteur = %d\n", foo); + dst = Image_alloc(256, foo, 3); + foo = mire_grise(dst); + break; + case FNT16X24: +#if DEBUG_LEVEL + fprintf(stderr, "generation image fonte 16x24\n"); +#endif + cptr = argv[2]; + argument = GSP(0); + fprintf(stderr, "image fonte 16x24 %s -> %s\n", + cptr, argument); + foo = Image_t16x24_chars_map(cptr, argument, 0); + break; + default: + fprintf(stderr, "method not implemented\n"); + foo=-1; + break; + } + +if (foo) + fprintf(stderr, "retour = %d, %s\n", foo, Image_err2str(foo)); + +if (dst != NULL) + { + foo = Image_TGA_save(argv[2], dst, 0); + Image_DeAllocate(dst); + } + +#if DEBUG_LEVEL +puts(""); +#endif + +return 0; +} +/*::------------------------------------------------------------------::*/ diff --git a/Tools/tga_outils.h b/Tools/tga_outils.h index ae247a2..773f861 100644 --- a/Tools/tga_outils.h +++ b/Tools/tga_outils.h @@ -7,7 +7,7 @@ #include "../tthimage.h" -#define TGA_OUTILS_VERSION "0.58" +#define TGA_OUTILS_VERSION "0.59" /* * 13 Dec 2001: v0.11 a cause du 'mustopen' pour les palettes. * 11 Fev 2002: v0.12 a cause du '-ansi' (hein Kerdeuzz, on y vient) diff --git a/Tools/tga_remap.c b/Tools/tga_remap.c new file mode 100644 index 0000000..a166a0c --- /dev/null +++ b/Tools/tga_remap.c @@ -0,0 +1,117 @@ +/* + _ + | |_ __ _ __ _ _ __ ___ _ __ ___ __ _ _ __ + | __/ _` |/ _` | | '__/ _ \ '_ ` _ \ / _` | '_ \ + | || (_| | (_| | | | | __/ | | | | | (_| | |_) | + \__\__, |\__,_|___|_| \___|_| |_| |_|\__,_| .__/ + |___/ |_____| |_| + +*/ + +#include +#include +#include +#include + +#include "tga_outils.h" + +/*::------------------------------------------------------------------::*/ +void usage(int flag) +{ +fprintf(stderr, "* tga_remap v 0.1.21 [%s] %s\n", + TGA_OUTILS_VERSION, TGA_OUTILS_COPYLEFT); +fprintf(stderr, "Usage: tga_remap M \n"); +fprintf(stderr, " tga_remap -? for more infos...\n"); +if (flag) + { + PERL; + PERR("valid values for 'M'"); + PERR(" 0 minimal distance"); + PERR(" 1 min of R or G or B dist"); + PERR(" 2 ???"); + PERR(" 11 minimal dist for R"); + PERR(" 12 minimal dist for G"); + PERR(" 13 minimal dist for B"); + PERL; + Image_print_version(2); + } +else + { + Image_print_version(0); + } +exit(5); +} +/*::------------------------------------------------------------------::*/ +int main(int argc, char *argv[]) +{ +Image_Desc *src, *dst; +int foo, type; +RGB_map map; +long t_debut, t_fin; + +dump_command_line(argc, argv, 0); + +if (argc==2 && !strcmp(argv[1], "-?")) usage(1); + +if (argc != 5) usage(0); + +if ( (src=Image_TGA_alloc_load(argv[2])) == NULL ) + { + fprintf(stderr, "can't load '%s'\n", argv[2]); + exit(1); + } + +if ( (foo=Image_load_color_Map(argv[3], "map", &map)) ) + { + fprintf(stderr, "%s: %s: err %d '%s'\n", argv[0], argv[3], + foo, Image_err2str(foo)); + exit(1); + } + +if (must_be_verbose()) + { + fprintf(stderr, "Il y a %d couleurs dans la palette '%s'\n", + map.nbre, argv[3]); + } + +/* + * que faire si le nombre de couleurs dans la palette est pas bon ??? + */ + +if ( (dst=Image_clone(src, 0))==NULL ) + { + fprintf(stderr, "can't clone %p, exiting...\n", src); + exit(2); + } + +/* ---------- determiner le type de remap demande */ +if ( (sscanf(argv[1], "%d", &type)) != 1 ) type = 0; + +#if DEBUG_LEVEL +t_debut = time(NULL); +#endif + +if ( (foo=Image_colors_2_Map(src, dst, &map, type)) ) + { + fprintf(stderr, "%s: color->map: erreur %d: %s\n", argv[0], + foo, Image_err2str(foo)); + /* Oulala ! c'est pas un peu brutal ? */ + exit(1); + } + +#if DEBUG_LEVEL +t_fin = time(NULL); +fprintf(stderr, " remap : %ld secondes\n", t_fin-t_debut); +#endif + +foo = Image_TGA_save(argv[4], dst, 0); +if (foo) + { + fprintf(stderr, "%s: TGA_save: err %d %s\n", + argv[0], foo, Image_err2str(foo)); + exit(1); + } + +exit (0); +} +/*::------------------------------------------------------------------::*/ diff --git a/build.sh b/build.sh index b69e4da..760045d 100755 --- a/build.sh +++ b/build.sh @@ -2,9 +2,11 @@ cd Lib +echo "========== in $PWD" make testtga cd .. cd Tools +echo "========== in $PWD" make cd ..