#include #include #include // // NBCOL/NBLIG : nombre de pixels sur une colonne/ligne // de l'image Meteosat Full Disc // LHEAD1 : taille du premier header commun a tous les canaux // LHEADN : taille du deuxieme header pour IR et WV // LHEADV : taille du deuxieme header pour VIS // LHEADR : taille du header du record # define NBCOL 2500 # define NBLIG 2500 # define LHEAD1 1345 # define LHEADN 144515 # define LHEADV 192999 # define LHEADR 32 /*---------------------------------------------------------*/ /* Programme : xtr_imaMPT.c */ /* */ /* . extrait les donnees de l'image Meteosat */ /* */ /* PROGRAMME DEPENDANT DU FORMAT du NOM DE FICHIER */ /* */ /* Input : */ /* filename : fichier OpenMTP contenant l'image EUMETSAT */ /* */ /* Output : */ /* fimage : fichier contenant uniquement les donnees */ /* (unsigned char) */ /* */ /* Appel : */ /* xtr_imaMTP filename */ /* avec filename : nom du fichier meteosat */ /* (au format OpenMTP) */ /* */ /* Auteur : */ /* ICARE - A.Alias Mai 2003 */ /*---------------------------------------------------------*/ main(int argc,char *argv[]) { FILE *fp,*fpo; char *filename,*ptrec,*ptc,ctype[9]; int ret_flag,nl,nc,l,i; long offset; unsigned char record[NBCOL+LHEADR],ctab[5]; /* ---------------- SYNTAXE D'APPEL DE L'EXECUTABLE -------- */ if (argc != 2) { printf ("\n\nerreur syntaxe : xtr_imaMTP filename \n"); exit(1); } /* ---------------- PROGRAMME PRINCIPAL -------------------- */ filename=argv[1]; fp=fopen(filename,"r"); if(!fp) { printf("Unable to open file : %s .\n", filename); exit(1); } fpo=fopen("fimage","w"); if(!fpo) { printf("Unable to open file : %s .\n", filename); exit(1); } /* Saut du premier header */ offset=LHEAD1; ret_flag=fseek(fp, offset, SEEK_SET); if(ret_flag) { printf("Wrong input size length ; check it up, please !\n"); fclose(fp); exit(1); } ret_flag=fread(ctype, 8, 1, fp); if(ret_flag!=1) { printf("Erreur de lecture (1) : %s\n", filename); fclose(fp); exit(1); } ctype[8]='\0'; ret_flag=strncmp(ctype," PV",3); if (ret_flag==0) { offset=LHEAD1+LHEADV; } else { offset=LHEAD1+LHEADN; } /* Positionnement au debut de l'image */ ret_flag=fseek(fp, offset, SEEK_SET); if(ret_flag) { printf("Wrong input size length ; check it up, please !\n"); fclose(fp); exit(1); } /* Lecture de l'image */ l=1; for (nl=0;nl