/* * The Npic library and tools * * Copyright (C) 2003 Edouard Thiel * * This program is free software under the terms of the * GNU Lesser General Public License (LGPL) version 2.1. */ /* DO NOT EDIT !!! Generated by npic-templa from "npic-val.ct" */ /* * npic-val.c - 02/10/2008 * */ #include void ShowUsage () { printf ( "npic-val - Change pixel values.\n" "Usage:\n" " npic-val -h | -help | --help : print help\n" " npic-val in1 out1 actions ...\n" "\n" "in1, out1 : image in " NPIC_KNOWN_IMAGE_EXT " format\n" "\n" "actions:\n" " -fill a : set all pixels -> a\n" " -change a b : a -> b\n" " -exchange a b : a <-> b\n" " -thr-lt a b : pixels < a -> b\n" " -thr-gt a b : pixels > a -> b\n" " -thr-le a b : pixels <= a -> b\n" " -thr-ge a b : pixels >= a -> b\n" "\n" "a, b: integer or double or r:g:b:a, depending on image type.\n" "\n" ); } void ArgcExit (int argc, int n) { if (argc < n) { fprintf (stderr, "ERROR: %d argument(s) missing, " "type \"npic-val -h\" to get help.\n", n-argc); exit (1); } } void ArgShift (int *argc, char **argv[], int n) { *argc -= n; *argv += n; } int main (int argc, char *argv[]) { Npic_image *np1; char *in1, *out1; int modified = 0, bad_rgba = 0; ArgcExit (argc, 2); if (strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "-help") == 0 || strcmp (argv[1], "--help") == 0) { ShowUsage (); exit (0); } ArgcExit (argc, 3); in1 = argv[1]; out1 = argv[2]; ArgShift (&argc, &argv, 2); printf ("Loading \"%s\"\n", in1); np1 = NpicReadImage (in1); if (np1 == NULL) exit (1); while (argc > 1) { if (strcmp (argv[1], "-fill") == 0) { /*-----------------------------*/ ArgcExit (argc, 3); switch (np1->type) { case NPIC_IMAGE_2C : case NPIC_IMAGE_3C : case NPIC_IMAGE_4C : case NPIC_IMAGE_5C : case NPIC_IMAGE_6C : case NPIC_IMAGE_2L : case NPIC_IMAGE_3L : case NPIC_IMAGE_4L : case NPIC_IMAGE_5L : case NPIC_IMAGE_6L : NpicFillVal_i (np1, atoi(argv[2])); break; case NPIC_IMAGE_2D : case NPIC_IMAGE_3D : case NPIC_IMAGE_4D : case NPIC_IMAGE_5D : case NPIC_IMAGE_6D : NpicFillVal_d (np1, atof(argv[2])); break; case NPIC_IMAGE_2Q : case NPIC_IMAGE_3Q : case NPIC_IMAGE_4Q : case NPIC_IMAGE_5Q : case NPIC_IMAGE_6Q : { int a, b, c, d; if (sscanf (argv[2], "%d:%d:%d:%d", &a, &b, &c, &d) == 4) NpicFillVal_q (np1, a, b, c, d); else bad_rgba = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_rgba) { fprintf (stderr, "ERROR: bad r:g:b:a values\n"); exit (1); } ArgShift (&argc, &argv, 2); modified = 1; } else if (strcmp (argv[1], "-change") == 0) { /*---------------------*/ ArgcExit (argc, 4); switch (np1->type) { case NPIC_IMAGE_2C : case NPIC_IMAGE_3C : case NPIC_IMAGE_4C : case NPIC_IMAGE_5C : case NPIC_IMAGE_6C : case NPIC_IMAGE_2L : case NPIC_IMAGE_3L : case NPIC_IMAGE_4L : case NPIC_IMAGE_5L : case NPIC_IMAGE_6L : NpicChangeVal_i (np1, atoi(argv[2]), atoi(argv[3])); break; case NPIC_IMAGE_2D : case NPIC_IMAGE_3D : case NPIC_IMAGE_4D : case NPIC_IMAGE_5D : case NPIC_IMAGE_6D : NpicChangeVal_d (np1, atof(argv[2]), atof(argv[3])); break; case NPIC_IMAGE_2Q : case NPIC_IMAGE_3Q : case NPIC_IMAGE_4Q : case NPIC_IMAGE_5Q : case NPIC_IMAGE_6Q : { int a1, b1, c1, d1, a2, b2, c2, d2; if ( sscanf (argv[2], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4) NpicChangeVal_q (np1, a1, b1, c1, d1, a2, b2, c2, d2); else bad_rgba = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_rgba) { fprintf (stderr, "ERROR: bad r:g:b:a values\n"); exit (1); } ArgShift (&argc, &argv, 3); modified = 1; } else if (strcmp (argv[1], "-exchange") == 0) { /*-------------------*/ ArgcExit (argc, 4); switch (np1->type) { case NPIC_IMAGE_2C : case NPIC_IMAGE_3C : case NPIC_IMAGE_4C : case NPIC_IMAGE_5C : case NPIC_IMAGE_6C : case NPIC_IMAGE_2L : case NPIC_IMAGE_3L : case NPIC_IMAGE_4L : case NPIC_IMAGE_5L : case NPIC_IMAGE_6L : NpicExchangeVal_i (np1, atoi(argv[2]), atoi(argv[3])); break; case NPIC_IMAGE_2D : case NPIC_IMAGE_3D : case NPIC_IMAGE_4D : case NPIC_IMAGE_5D : case NPIC_IMAGE_6D : NpicExchangeVal_d (np1, atof(argv[2]), atof(argv[3])); break; case NPIC_IMAGE_2Q : case NPIC_IMAGE_3Q : case NPIC_IMAGE_4Q : case NPIC_IMAGE_5Q : case NPIC_IMAGE_6Q : { int a1, b1, c1, d1, a2, b2, c2, d2; if ( sscanf (argv[2], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4) NpicExchangeVal_q (np1, a1, b1, c1, d1, a2, b2, c2, d2); else bad_rgba = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_rgba) { fprintf (stderr, "ERROR: bad r:g:b:a values\n"); exit (1); } ArgShift (&argc, &argv, 3); modified = 1; } else if (strcmp (argv[1], "-thr-lt") == 0) { /*---------------------*/ ArgcExit (argc, 4); switch (np1->type) { case NPIC_IMAGE_2C : case NPIC_IMAGE_3C : case NPIC_IMAGE_4C : case NPIC_IMAGE_5C : case NPIC_IMAGE_6C : case NPIC_IMAGE_2L : case NPIC_IMAGE_3L : case NPIC_IMAGE_4L : case NPIC_IMAGE_5L : case NPIC_IMAGE_6L : NpicThresholdLT_i (np1, atoi(argv[2]), atoi(argv[3])); break; case NPIC_IMAGE_2D : case NPIC_IMAGE_3D : case NPIC_IMAGE_4D : case NPIC_IMAGE_5D : case NPIC_IMAGE_6D : NpicThresholdLT_d (np1, atof(argv[2]), atof(argv[3])); break; case NPIC_IMAGE_2Q : case NPIC_IMAGE_3Q : case NPIC_IMAGE_4Q : case NPIC_IMAGE_5Q : case NPIC_IMAGE_6Q : { int a1, b1, c1, d1, a2, b2, c2, d2; if ( sscanf (argv[2], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4) NpicThresholdLT_q (np1, a1, b1, c1, d1, a2, b2, c2, d2); else bad_rgba = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_rgba) { fprintf (stderr, "ERROR: bad r:g:b:a values\n"); exit (1); } ArgShift (&argc, &argv, 3); modified = 1; } else if (strcmp (argv[1], "-thr-gt") == 0) { /*---------------------*/ ArgcExit (argc, 4); switch (np1->type) { case NPIC_IMAGE_2C : case NPIC_IMAGE_3C : case NPIC_IMAGE_4C : case NPIC_IMAGE_5C : case NPIC_IMAGE_6C : case NPIC_IMAGE_2L : case NPIC_IMAGE_3L : case NPIC_IMAGE_4L : case NPIC_IMAGE_5L : case NPIC_IMAGE_6L : NpicThresholdGT_i (np1, atoi(argv[2]), atoi(argv[3])); break; case NPIC_IMAGE_2D : case NPIC_IMAGE_3D : case NPIC_IMAGE_4D : case NPIC_IMAGE_5D : case NPIC_IMAGE_6D : NpicThresholdGT_d (np1, atof(argv[2]), atof(argv[3])); break; case NPIC_IMAGE_2Q : case NPIC_IMAGE_3Q : case NPIC_IMAGE_4Q : case NPIC_IMAGE_5Q : case NPIC_IMAGE_6Q : { int a1, b1, c1, d1, a2, b2, c2, d2; if ( sscanf (argv[2], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4) NpicThresholdGT_q (np1, a1, b1, c1, d1, a2, b2, c2, d2); else bad_rgba = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_rgba) { fprintf (stderr, "ERROR: bad r:g:b:a values\n"); exit (1); } ArgShift (&argc, &argv, 3); modified = 1; } else if (strcmp (argv[1], "-thr-le") == 0) { /*---------------------*/ ArgcExit (argc, 4); switch (np1->type) { case NPIC_IMAGE_2C : case NPIC_IMAGE_3C : case NPIC_IMAGE_4C : case NPIC_IMAGE_5C : case NPIC_IMAGE_6C : case NPIC_IMAGE_2L : case NPIC_IMAGE_3L : case NPIC_IMAGE_4L : case NPIC_IMAGE_5L : case NPIC_IMAGE_6L : NpicThresholdLE_i (np1, atoi(argv[2]), atoi(argv[3])); break; case NPIC_IMAGE_2D : case NPIC_IMAGE_3D : case NPIC_IMAGE_4D : case NPIC_IMAGE_5D : case NPIC_IMAGE_6D : NpicThresholdLE_d (np1, atof(argv[2]), atof(argv[3])); break; case NPIC_IMAGE_2Q : case NPIC_IMAGE_3Q : case NPIC_IMAGE_4Q : case NPIC_IMAGE_5Q : case NPIC_IMAGE_6Q : { int a1, b1, c1, d1, a2, b2, c2, d2; if ( sscanf (argv[2], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4) NpicThresholdLE_q (np1, a1, b1, c1, d1, a2, b2, c2, d2); else bad_rgba = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_rgba) { fprintf (stderr, "ERROR: bad r:g:b:a values\n"); exit (1); } ArgShift (&argc, &argv, 3); modified = 1; } else if (strcmp (argv[1], "-thr-ge") == 0) { /*---------------------*/ ArgcExit (argc, 4); switch (np1->type) { case NPIC_IMAGE_2C : case NPIC_IMAGE_3C : case NPIC_IMAGE_4C : case NPIC_IMAGE_5C : case NPIC_IMAGE_6C : case NPIC_IMAGE_2L : case NPIC_IMAGE_3L : case NPIC_IMAGE_4L : case NPIC_IMAGE_5L : case NPIC_IMAGE_6L : NpicThresholdGE_i (np1, atoi(argv[2]), atoi(argv[3])); break; case NPIC_IMAGE_2D : case NPIC_IMAGE_3D : case NPIC_IMAGE_4D : case NPIC_IMAGE_5D : case NPIC_IMAGE_6D : NpicThresholdGE_d (np1, atof(argv[2]), atof(argv[3])); break; case NPIC_IMAGE_2Q : case NPIC_IMAGE_3Q : case NPIC_IMAGE_4Q : case NPIC_IMAGE_5Q : case NPIC_IMAGE_6Q : { int a1, b1, c1, d1, a2, b2, c2, d2; if ( sscanf (argv[2], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4) NpicThresholdGE_q (np1, a1, b1, c1, d1, a2, b2, c2, d2); else bad_rgba = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_rgba) { fprintf (stderr, "ERROR: bad r:g:b:a values\n"); exit (1); } ArgShift (&argc, &argv, 3); modified = 1; } else { /*-----------------------------------------------------------*/ fprintf (stderr, "ERROR: unknown argument \"%s\", " "type \"npic-val -h\" to get help.\n", argv[1]); exit (1); } } if (modified) { printf ("Saving \"%s\" ... \n", out1); NpicWriteImage (np1, out1); } exit (0); }