Ver código fonte

fix some problems with floor func

remove bogus 16bit mode
simplify false color computation
clean and indent code
tags/v1.6
Thierry Leconte 20 anos atrás
pai
commit
4128ec4764
1 arquivos alterados com 310 adições e 382 exclusões
  1. +310
    -382
      main.c

+ 310
- 382
main.c Ver arquivo

@@ -1,6 +1,6 @@
/*
* Atpdec
* Copyright (c) 2003 by Thierry Leconte (F4DWV)
* Copyright (c) 2004 by Thierry Leconte (F4DWV)
*
* $Id$
*
@@ -32,7 +32,7 @@

#include "version.h"

extern getpixelrow (float *pixelv);
extern int getpixelrow(float *pixelv);

#define SYNC_WIDTH 39
#define SPC_WIDTH 47
@@ -42,438 +42,366 @@ extern getpixelrow (float *pixelv);
#define IMG_WIDTH 2080

static SNDFILE *inwav;
static int
initsnd (char *filename)
static int initsnd(char *filename)
{
SF_INFO infwav;
SF_INFO infwav;

/* open wav input file */
infwav.format = 0;
inwav = sf_open (filename, SFM_READ, &infwav);
if (inwav == NULL) {
fprintf (stderr, "could not open %s\n", filename);
return (1);
}
if (infwav.samplerate != 11025) {
fprintf (stderr, "Bad Input File sample rate: %d. Must be 11025\n",
infwav.samplerate);
return (1);
}
if (infwav.channels != 1) {
fprintf (stderr, "Too many channels in input file : %d\n",
infwav.channels);
return (1);
}
return (0);
infwav.format = 0;
inwav = sf_open(filename, SFM_READ, &infwav);
if (inwav == NULL) {
fprintf(stderr, "could not open %s\n", filename);
return (1);
}
if (infwav.samplerate != 11025) {
fprintf(stderr, "Bad Input File sample rate: %d. Must be 11025\n",
infwav.samplerate);
return (1);
}
if (infwav.channels != 1) {
fprintf(stderr, "Too many channels in input file : %d\n",
infwav.channels);
return (1);
}
return (0);
}

int
getsample (float *sample, int nb)
int getsample(float *sample, int nb)
{
return (sf_read_float (inwav, sample, nb));
return (sf_read_float(inwav, sample, nb));
}

static png_text text_ptr[] = {
{PNG_TEXT_COMPRESSION_NONE, "Software", version, sizeof (version)}
,
{PNG_TEXT_COMPRESSION_NONE, "Channel", NULL, 0}
,
{PNG_TEXT_COMPRESSION_NONE, "Description", "NOAA POES satellite Image", 25}
{PNG_TEXT_COMPRESSION_NONE, "Software", version, sizeof(version)}
,
{PNG_TEXT_COMPRESSION_NONE, "Channel", NULL, 0}
,
{PNG_TEXT_COMPRESSION_NONE, "Description", "NOAA POES satellite Image",
25}
};

static int
ImageOut (char *filename, char *chid, float **prow, int nrow, int depth,
int width, int offset)
ImageOut(char *filename, char *chid, float **prow, int nrow,
int width, int offset)
{
FILE *pngfile;
png_infop info_ptr;
png_structp png_ptr;
int n;
FILE *pngfile;
png_infop info_ptr;
png_structp png_ptr;
int n;

/* init png lib */
png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
fprintf (stderr, "could not open create png_ptr\n");
return (1);
}

info_ptr = png_create_info_struct (png_ptr);
if (!info_ptr) {
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
fprintf (stderr, "could not open create info_ptr\n");
return (1);
}

png_set_IHDR (png_ptr, info_ptr, width, nrow,
depth, PNG_COLOR_TYPE_GRAY, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);

text_ptr[1].text = chid;
text_ptr[1].text_length = strlen (chid);
png_set_text (png_ptr, info_ptr, text_ptr, 3);
png_set_pHYs (png_ptr, info_ptr, 4000, 4000, PNG_RESOLUTION_METER);

printf ("Writing %s ... ", filename);
fflush (stdout);
#ifdef WIN32
pngfile = fopen (filename, "wb");
#else
pngfile = fopen (filename, "w");
#endif
if (pngfile == NULL) {
fprintf (stderr, "could not open %s\n", filename);
return (1);
}
png_init_io (png_ptr, pngfile);
png_write_info (png_ptr, info_ptr);

for (n = 0; n < nrow; n++) {
float *pixelv;
png_byte pixel[2 * IMG_WIDTH];
int i;

pixelv = prow[n];
for (i = 0; i < width; i++) {
float pv;

pv = pixelv[i + offset];
switch (depth) {
case 8:
pixel[i] = floor (pv);
break;
#ifndef WIN32
case 16:
((unsigned short *) pixel)[i] =
htons ((unsigned short) floor (pv * 255.0));
break;
#endif
}
png_ptr =
png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
fprintf(stderr, "could not open create png_ptr\n");
return (1);
}

info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
fprintf(stderr, "could not open create info_ptr\n");
return (1);
}

png_set_IHDR(png_ptr, info_ptr, width, nrow,
8, PNG_COLOR_TYPE_GRAY, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);

text_ptr[1].text = chid;
text_ptr[1].text_length = strlen(chid);
png_set_text(png_ptr, info_ptr, text_ptr, 3);
png_set_pHYs(png_ptr, info_ptr, 4000, 4000, PNG_RESOLUTION_METER);

printf("Writing %s ... ", filename);
fflush(stdout);
pngfile = fopen(filename, "wb");
if (pngfile == NULL) {
fprintf(stderr, "could not open %s\n", filename);
return (1);
}
png_write_row (png_ptr, pixel);
}
png_write_end (png_ptr, info_ptr);
fclose (pngfile);
printf ("Done\n");
png_destroy_write_struct (&png_ptr, &info_ptr);
return (0);
png_init_io(png_ptr, pngfile);
png_write_info(png_ptr, info_ptr);

for (n = 0; n < nrow; n++) {
float *pixelv;
png_byte pixel[2*IMG_WIDTH];
int i;

pixelv = prow[n];
for (i = 0; i < width; i++) {
pixel[i] = pixelv[i + offset];
}
png_write_row(png_ptr, pixel);
}
png_write_end(png_ptr, info_ptr);
fclose(pngfile);
printf("Done\n");
png_destroy_write_struct(&png_ptr, &info_ptr);
return (0);
}

int
ImageColorOut (char *filename, float **prow, int nrow)
int ImageColorOut(char *filename, float **prow, int nrow)
{
FILE *pngfile;
png_infop info_ptr;
png_structp png_ptr;
int n;
float *pixelc,*pixeln,*pixelp;
float pv[CH_WIDTH];
float pt[CH_WIDTH];

extern void false_color (double v, double t, float *r, float *g, float *b);
extern void dres(
float av, float at, float bv, float bt,
float cv, float ct, float dv, float dt,
float *v , float *t);
FILE *pngfile;
png_infop info_ptr;
png_structp png_ptr;
int n;
float *pixelc, *pixeln;

extern void falsecolor(double v, double t, float *r, float *g,
float *b);

/* init png lib */
png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
fprintf (stderr, "could not open create png_ptr\n");
return (1);
}

info_ptr = png_create_info_struct (png_ptr);
if (!info_ptr) {
png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
fprintf (stderr, "could not open create info_ptr\n");
return (1);
}

png_set_IHDR (png_ptr, info_ptr, 2*CH_WIDTH-3, 2*nrow-3,
8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);

text_ptr[1].text = "False Colors";
png_set_pHYs (png_ptr, info_ptr, 2000, 2000, PNG_RESOLUTION_METER);

text_ptr[1].text_length = strlen (text_ptr[1].text);
png_set_text (png_ptr, info_ptr, text_ptr, 3);

printf ("Computing False colors & writing : %s ...", filename);
fflush (stdout);
#ifdef WIN32
pngfile = fopen (filename, "wb");
#else
pngfile = fopen (filename, "w");
#endif
if (pngfile == NULL) {
fprintf (stderr, "could not open %s\n", filename);
return (1);
}
png_init_io (png_ptr, pngfile);
png_write_info (png_ptr, info_ptr);

pixelc=NULL;pixeln=prow[0];

for (n = 0; n < nrow-1; n++) {
png_color pixa[2*CH_WIDTH];
png_color pixb[2*CH_WIDTH];
int i;

pixelp=pixelc;pixelc=pixeln;pixeln=prow[n+1];

for (i = 0; i < CH_WIDTH-1; i++) {
float av,bv,cv,dv;
float at,bt,ct,dt;
float pvc,ptc;
float v,t;
float r, g, b;
av = pixelc[i+SYNC_WIDTH + SPC_WIDTH];
bv = pixeln[i+SYNC_WIDTH + SPC_WIDTH];
cv = pixelc[i+1+SYNC_WIDTH + SPC_WIDTH];
dv = pixeln[i+1+SYNC_WIDTH + SPC_WIDTH];
if(n!=0) {
at = 0.667*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]
+ 0.333*pixelp[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
bt = 0.667*pixeln[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]
+ 0.333*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
ct = 0.667*pixelc[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]
+ 0.333*pixelp[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
dt = 0.667*pixeln[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]
+ 0.333*pixelc[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
} else {
at = pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
bt = pixeln[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
ct = pixelc[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
dt = pixeln[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
}

dres (av,at,bv,bt,cv,ct,dv,dt,&v,&t);

falsecolor (v, t, &r, &g, &b);
pixb[2*i].red = (unsigned int) (255.0 * r);
pixb[2*i].green = (unsigned int) (255.0 * g);
pixb[2*i].blue = (unsigned int) (255.0 * b);

pvc=v;ptc=t;

if(n!=0) {
av = pv[i];
bv = pixelc[i+SYNC_WIDTH + SPC_WIDTH];
cv = pixelc[i+1+SYNC_WIDTH + SPC_WIDTH];
dv = pvc;
at = pt[i];
bt = 0.667*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]
+ 0.333*pixelp[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
ct = 0.667*pixelc[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]
+ 0.333*pixelp[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
dt = ptc;

dres (av,at,bv,bt,cv,ct,dv,dt,&v,&t);

falsecolor (v, t, &r, &g, &b);
pixa[2*i].red = (unsigned int) (255.0 * r);
pixa[2*i].green = (unsigned int) (255.0 * g);
pixa[2*i].blue = (unsigned int) (255.0 * b);
}
pv[i]=pvc;pt[i]=ptc;

if (i!=0) {

if (n!=0) {
v = pixelc[i+SYNC_WIDTH + SPC_WIDTH];
t = 0.667*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]
+ 0.333*pixelp[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
falsecolor (v, t, &r, &g, &b);
pixa[2*i-1].red = (unsigned int) (255.0 * r);
pixa[2*i-1].green = (unsigned int) (255.0 * g);
pixa[2*i-1].blue = (unsigned int) (255.0 * b);
}

av = pixelc[i+SYNC_WIDTH + SPC_WIDTH];
bv = pv[i-1];
cv = pvc;
dv = pixeln[i+SYNC_WIDTH + SPC_WIDTH];
if(n!=0) {
at = 0.667*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]
+ 0.333*pixelp[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
dt = 0.667*pixeln[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]
+ 0.333*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
} else {
at = pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
dt = pixeln[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];
}
bt = pt[i-1];
ct = ptc;
dres (av,at,bv,bt,cv,ct,dv,dt,&v,&t);

falsecolor (v, t, &r, &g, &b);
pixb[2*i-1].red = (unsigned int) (255.0 * r);
pixb[2*i-1].green = (unsigned int) (255.0 * g);
pixb[2*i-1].blue = (unsigned int) (255.0 * b);
}
png_ptr =
png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
fprintf(stderr, "could not open create png_ptr\n");
return (1);
}

info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
fprintf(stderr, "could not open create info_ptr\n");
return (1);
}

png_set_IHDR(png_ptr, info_ptr, 2 * (CH_WIDTH - 1), 2 * (nrow - 1),
8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);

png_set_pHYs(png_ptr, info_ptr, 2000, 2000, PNG_RESOLUTION_METER);

text_ptr[1].text = "False Colors";
text_ptr[1].text_length = strlen(text_ptr[1].text);
png_set_text(png_ptr, info_ptr, text_ptr, 3);

printf("Computing False colors & writing : %s ...", filename);
fflush(stdout);
pngfile = fopen(filename, "wb");
if (pngfile == NULL) {
fprintf(stderr, "could not open %s\n", filename);
return (1);
}
png_init_io(png_ptr, pngfile);
png_write_info(png_ptr, info_ptr);

for (n = 0; n < nrow - 1; n++) {
png_color pix[2 * CH_WIDTH];
float r, g, b;
float v, vs, t, ts;
int i;

pixelc = prow[n];
pixeln = prow[n + 1];

v = (pixelc[SYNC_WIDTH + SPC_WIDTH] +
pixeln[SYNC_WIDTH + SPC_WIDTH]) / 2.0;
for (i = 0; i < CH_WIDTH - 1; i++) {

t = pixelc[i + SYNC_WIDTH + SPC_WIDTH + CH_OFFSET];

falsecolor(v, t, &r, &g, &b);
pix[2 * i].red = 255.0 * r;
pix[2 * i].green = 255.0 * g;
pix[2 * i].blue = 255.0 * b;

vs = (pixelc[i + 1 + SYNC_WIDTH + SPC_WIDTH] +
pixeln[i + 1 + SYNC_WIDTH + SPC_WIDTH]) / 2.0;
v = (v + vs) / 2.0;
t = (pixelc[i + SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] +
pixelc[i + 1 + SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]) / 2.0;

falsecolor(v, t, &r, &g, &b);
pix[2 * i + 1].red = 255.0 * r;
pix[2 * i + 1].green = 255.0 * g;
pix[2 * i + 1].blue = 255.0 * b;

v = vs;
}
png_write_row(png_ptr, (png_bytep) pix);

t = (pixelc[SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] +
pixeln[SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]) / 2.0;
for (i = 0; i < CH_WIDTH - 1; i++) {

v = pixeln[i + SYNC_WIDTH + SPC_WIDTH];

falsecolor(v, t, &r, &g, &b);
pix[2 * i].red = 255.0 * r;
pix[2 * i].green = 255.0 * g;
pix[2 * i].blue = 255.0 * b;

v = (pixeln[i + SYNC_WIDTH + SPC_WIDTH] +
pixeln[i + 1 + SYNC_WIDTH + SPC_WIDTH]) / 2.0;
ts = (pixelc[i + SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] +
pixeln[i + 1 + SYNC_WIDTH + SPC_WIDTH +
CH_OFFSET]) / 2.0;
t = (t + ts) / 2.0;
falsecolor(v, t, &r, &g, &b);
pix[2 * i + 1].red = 255.0 * r;
pix[2 * i + 1].green = 255.0 * g;
pix[2 * i + 1].blue = 255.0 * b;

t = ts;
}
png_write_row(png_ptr, (png_bytep) pix);
}
if(n!=0) png_write_row (png_ptr, (png_bytep) pixa);
png_write_row (png_ptr, (png_bytep) pixb);

}
png_write_end (png_ptr, info_ptr);
fclose (pngfile);
printf ("Done\n");
png_destroy_write_struct (&png_ptr, &info_ptr);
return (0);
png_write_end(png_ptr, info_ptr);
fclose(pngfile);
printf("Done\n");
png_destroy_write_struct(&png_ptr, &info_ptr);
return (0);
}

extern int Calibrate (float **prow, int nrow, int offset);
extern int Temperature (float **prow, int nrow, int ch, int offset);
extern void readfconf (char *file);
extern int Calibrate(float **prow, int nrow, int offset);
extern void Temperature(float **prow, int nrow, int ch, int offset);
extern void readfconf(char *file);
extern int optind, opterr;
extern char *optarg;
int satnum = 1;

static void
usage (void)
static void usage(void)
{
fprintf (stderr, "atpdec [options] soundfiles ...\n");
fprintf (stderr,
"options:\n-d <dir>\tDestination directory\n-i [a|b|c|t]\tOutput image type\n\t\t\tr: Raw\n\t\t\ta: A chan.\n\t\t\tb: B chan.\n\t\t\tc: False color\n\t\t\tt: Temperature\n-c <file>\tFalse color config file\n-p\t\t16bits output\n-s [0|1]\tSatellite id (for temperature and false color generation)\n\t\t\t0:NOAA15\n\t\t\t1:NOAA17\n");
fprintf(stderr, "atpdec [options] soundfiles ...\n");
fprintf(stderr,
"options:\n-d <dir>\tDestination directory\n-i [a|b|c|t]\tOutput image type\n\t\t\tr: Raw\n\t\t\ta: A chan.\n\t\t\tb: B chan.\n\t\t\tc: False color\n\t\t\tt: Temperature\n-c <file>\tFalse color config file\n-s [0|1]\tSatellite id (for temperature and false color generation)\n\t\t\t0:NOAA15\n\t\t\t1:NOAA17\n");
exit(1);
}

main (int argc, char **argv)
int main(int argc, char **argv)
{
char pngfilename[1024];
char name[1024];
char pngdirname[1024] = "";
char imgopt[20] = "ac";
float *prow[3000];
char *chid[6] = { "1", "2", "3A", "4", "5", "3B" };
int depth = 8;
int n, nrow;
int ch;
int c;

printf ("%s\n", version);

opterr = 0;
while ((c = getopt (argc, argv, "c:d:i:ps:")) != EOF) {
switch (c) {
case 'd':
strcpy (pngdirname, optarg);
break;
case 'c':
readfconf (optarg);
break;
case 'i':
strcpy (imgopt, optarg);
break;
case 'p':
depth = 16;
break;
case 's':
satnum = atoi (optarg);
if (satnum < 0 || satnum > 1) {
fprintf (stderr, "invalid satellite\n");
exit (1);
}
break;
default:
usage ();
char pngfilename[1024];
char name[1024];
char pngdirname[1024] = "";
char imgopt[20] = "ac";
float *prow[3000];
char *chid[6] = { "1", "2", "3A", "4", "5", "3B" };
int nrow;
int ch;
int c;

printf("%s\n", version);

opterr = 0;
while ((c = getopt(argc, argv, "c:d:i:s:")) != EOF) {
switch (c) {
case 'd':
strcpy(pngdirname, optarg);
break;
case 'c':
readfconf(optarg);
break;
case 'i':
strcpy(imgopt, optarg);
break;
case 's':
satnum = atoi(optarg);
if (satnum < 0 || satnum > 1) {
fprintf(stderr, "invalid satellite\n");
exit(1);
}
break;
default:
usage();
}
}
}

for (nrow = 0; nrow < 3000; nrow++)
prow[nrow] = NULL;
for (nrow = 0; nrow < 3000; nrow++)
prow[nrow] = NULL;

for (; optind < argc; optind++) {
int a = 0, b = 0;
for (; optind < argc; optind++) {
int a = 0, b = 0;

strcpy (pngfilename, argv[optind]);
strcpy (name, basename (pngfilename));
strtok (name, ".");
if (pngdirname[0] == '\0') {
strcpy (pngfilename, argv[optind]);
strcpy (pngdirname, dirname (pngfilename));
}
strcpy(pngfilename, argv[optind]);
strcpy(name, basename(pngfilename));
strtok(name, ".");
if (pngdirname[0] == '\0') {
strcpy(pngfilename, argv[optind]);
strcpy(pngdirname, dirname(pngfilename));
}

/* open snd input */
if (initsnd (argv[optind]))
exit (1);
if (initsnd(argv[optind]))
exit(1);

/* main loop */
printf ("Decoding: %s \n", argv[optind]);
for (nrow = 0; nrow < 3000; nrow++) {
if (prow[nrow] == NULL)
prow[nrow] = (float *) malloc (sizeof (float) * 2150);
if (getpixelrow (prow[nrow]) == 0)
break;
printf ("%d\r", nrow);
fflush (stdout);
}
printf ("\nDone\n", nrow);
sf_close (inwav);
printf("Decoding: %s \n", argv[optind]);
for (nrow = 0; nrow < 3000; nrow++) {
if (prow[nrow] == NULL)
prow[nrow] = (float *) malloc(sizeof(float) * 2150);
if (getpixelrow(prow[nrow]) == 0)
break;
printf("%d\r", nrow);
fflush(stdout);
}
printf("\nDone\n");
sf_close(inwav);

/* raw image */
if (strchr (imgopt, (int) 'r') != NULL) {
sprintf (pngfilename, "%s/%s-r.png", pngdirname, name);
ImageOut (pngfilename, "raw", prow, nrow, depth, IMG_WIDTH, 0);
}
if (strchr(imgopt, (int) 'r') != NULL) {
sprintf(pngfilename, "%s/%s-r.png", pngdirname, name);
ImageOut(pngfilename, "raw", prow, nrow, IMG_WIDTH, 0);
}

/* Channel A */
if (((strchr (imgopt, (int) 'a') != NULL)
|| (strchr (imgopt, (int) 'c') != NULL)
|| (strchr (imgopt, (int) 'd') != NULL))) {
ch = Calibrate (prow, nrow, SYNC_WIDTH);
if (ch >= 0) {
if (strchr (imgopt, (int) 'a') != NULL) {
sprintf (pngfilename, "%s/%s-%s.png", pngdirname, name, chid[ch]);
ImageOut (pngfilename, chid[ch], prow, nrow, depth,
SPC_WIDTH + CH_WIDTH + TELE_WIDTH, SYNC_WIDTH);
if (((strchr(imgopt, (int) 'a') != NULL)
|| (strchr(imgopt, (int) 'c') != NULL)
|| (strchr(imgopt, (int) 'd') != NULL))) {
ch = Calibrate(prow, nrow, SYNC_WIDTH);
if (ch >= 0) {
if (strchr(imgopt, (int) 'a') != NULL) {
sprintf(pngfilename, "%s/%s-%s.png", pngdirname, name,
chid[ch]);
ImageOut(pngfilename, chid[ch], prow, nrow,
SPC_WIDTH + CH_WIDTH + TELE_WIDTH,
SYNC_WIDTH);
}
}
if (ch < 2)
a = 1;
}
}
if (ch < 2)
a = 1;
}

/* Channel B */
if ((strchr (imgopt, (int) 'b') != NULL)
|| (strchr (imgopt, (int) 'c') != NULL)
|| (strchr (imgopt, (int) 't') != NULL)
|| (strchr (imgopt, (int) 'd') != NULL)) {
ch = Calibrate (prow, nrow, CH_OFFSET + SYNC_WIDTH);
if (ch >= 0) {
if (strchr (imgopt, (int) 'b') != NULL) {
sprintf (pngfilename, "%s/%s-%s.png", pngdirname, name, chid[ch]);
ImageOut (pngfilename, chid[ch], prow, nrow, depth,
SPC_WIDTH + CH_WIDTH + TELE_WIDTH,
CH_OFFSET + SYNC_WIDTH);
}
}
if (ch > 2) {
b = 1;
Temperature (prow, nrow, ch, CH_OFFSET + SYNC_WIDTH);
if (strchr (imgopt, (int) 't') != NULL) {
sprintf (pngfilename, "%s/%s-t.png", pngdirname, name);
ImageOut (pngfilename, "Temperature", prow, nrow, depth,
CH_WIDTH, CH_OFFSET + SYNC_WIDTH + SPC_WIDTH);
if ((strchr(imgopt, (int) 'b') != NULL)
|| (strchr(imgopt, (int) 'c') != NULL)
|| (strchr(imgopt, (int) 't') != NULL)
|| (strchr(imgopt, (int) 'd') != NULL)) {
ch = Calibrate(prow, nrow, CH_OFFSET + SYNC_WIDTH);
if (ch >= 0) {
if (strchr(imgopt, (int) 'b') != NULL) {
sprintf(pngfilename, "%s/%s-%s.png", pngdirname, name,
chid[ch]);
ImageOut(pngfilename, chid[ch], prow, nrow,
SPC_WIDTH + CH_WIDTH + TELE_WIDTH,
CH_OFFSET + SYNC_WIDTH);
}
}
if (ch > 2) {
b = 1;
Temperature(prow, nrow, ch, CH_OFFSET + SYNC_WIDTH);
if (strchr(imgopt, (int) 't') != NULL) {
sprintf(pngfilename, "%s/%s-t.png", pngdirname, name);
ImageOut(pngfilename, "Temperature", prow, nrow,
CH_WIDTH, CH_OFFSET + SYNC_WIDTH + SPC_WIDTH);
}
}
}
}
}

/* distribution */
if (a && b && strchr (imgopt, (int) 'd') != NULL) {
sprintf (pngfilename, "%s/%s-d.pnm", pngdirname, name);
}
if (a && b && strchr(imgopt, (int) 'd') != NULL) {
sprintf(pngfilename, "%s/%s-d.pnm", pngdirname, name);
}

/* color image */
if (a && b && strchr (imgopt, (int) 'c') != NULL) {
sprintf (pngfilename, "%s/%s-c.png", pngdirname, name);
ImageColorOut (pngfilename, prow, nrow);
}
if (a && b && strchr(imgopt, (int) 'c') != NULL) {
sprintf(pngfilename, "%s/%s-c.png", pngdirname, name);
ImageColorOut(pngfilename, prow, nrow);
}

}
exit (0);
}
exit(0);
}

Carregando…
Cancelar
Salvar