diff --git a/floatimg.h b/floatimg.h index f5a0b33..65c652a 100644 --- a/floatimg.h +++ b/floatimg.h @@ -2,7 +2,7 @@ * floatimg.h */ -#define FIMG_VERSION 61 +#define FIMG_VERSION 62 /* * in memory descriptor @@ -23,9 +23,9 @@ typedef struct { * fimg file header */ typedef struct { - // char magic[8]; + char magic[8]; int w, h, t; - } FimgFhead; + } FimgFileHead; /* * core module diff --git a/lib/fimg-file.c b/lib/fimg-file.c index a35da10..00e4040 100644 --- a/lib/fimg-file.c +++ b/lib/fimg-file.c @@ -7,7 +7,7 @@ #include #include #include -#include "string.h" +#include #include "../floatimg.h" @@ -16,7 +16,8 @@ extern int verbosity; /* must be declared around main() */ /* ---------------------------------------------------------------- */ int fimg_fileinfos(char *fname, int *datas) { -FILE *fp; +FILE *fp; +FimgFileHead filehead; #if DEBUG_LEVEL fprintf(stderr, ">>> %-25s ( '%s' %p )\n", __func__, fname, datas); @@ -27,29 +28,43 @@ if (NULL==fp) { perror(fname); return -1; } -if (3 != fread(datas, sizeof(int), 3, fp)) { - fprintf(stderr, "%s: %s short read\n", __func__, fname); + +if (1 != fread(&filehead, sizeof(FimgFileHead), 1, fp)) { + fprintf(stderr, "%s: %s bad read\n", __func__, fname); fclose(fp); return -2; } - fclose(fp); +#if DEBUG_LEVEL +fprintf(stderr, " magic [%s]\n", filehead.magic); +#endif + +if (strncmp(filehead.magic, "FIMG", 4)) { + fprintf(stderr, "'%s' is not a fimg file.\n", fname); + return -3; + } + +datas[0] = filehead.w; +datas[1] = filehead.h; +datas[2] = filehead.t; + return 0; } /* ---------------------------------------------------------------- */ -int fimg_dump_to_file(FloatImg *head, char *fname, int notused) +int fimg_dump_to_file(FloatImg *fimg, char *fname, int notused) { -FILE *fp; -int foo, nbre, dims[3]; +FILE *fp; +int foo, nbre; +FimgFileHead filehead; #if DEBUG_LEVEL -fprintf(stderr, ">>> %-25s ( %p '%s' %d )\n", __func__, head, +fprintf(stderr, ">>> %-25s ( %p '%s' %d )\n", __func__, fimg, fname, notused); #endif -if (3 != head->type) { - fprintf(stderr, "%s : bat type %d\n", __func__, head->type); +if (3 != fimg->type) { + fprintf(stderr, "%s : bat type %d\n", __func__, fimg->type); return -8; } @@ -59,22 +74,23 @@ if (NULL==fp) { return -1; } -dims[0] = head->width; dims[1] = head->height; -dims[2] = head->type; +strcpy(filehead.magic, "FIMG"); +filehead.w = fimg->width; filehead.h = fimg->height; +filehead.t = fimg->type; -foo = fwrite(dims, sizeof(int), 3, fp); -if (3 != foo) { +foo = fwrite(&filehead, sizeof(FimgFileHead), 1, fp); +if (1 != foo) { perror(fname); fclose(fp); return -2; } -nbre = head->width*head->height*3; +nbre = fimg->width*fimg->height*3; #if DEBUG_LEVEL -fprintf(stderr, " %s : data at %p\n", __func__, head->R); +fprintf(stderr, " %s : data at %p\n", __func__, fimg->R); #endif -foo = fwrite(head->R, sizeof(float), nbre, fp); -if (nbre!=foo) { +foo = fwrite(fimg->R, sizeof(float), nbre, fp); +if (nbre != foo) { perror(fname); fclose(fp); return -3; @@ -85,10 +101,12 @@ fclose(fp); return 0; } /* ---------------------------------------------------------------- */ + int fimg_create_from_dump(char *fname, FloatImg *head) { -FILE *fp; -int foo, dims[3]; +FILE *fp; +int foo; +FimgFileHead filehead; #if DEBUG_LEVEL fprintf(stderr, ">>> %-25s ( '%s' %p )\n", __func__, fname, head); @@ -100,24 +118,24 @@ if (NULL==fp) { exit(1); } -foo = fread(dims, sizeof(int), 3, fp); -if (3 != foo) { +foo = fread(&filehead, sizeof(FimgFileHead), 1, fp); +if (1 != foo) { fprintf(stderr, "%s : short read\n", fname); fclose(fp); return -1; } #if DEBUG_LEVEL fprintf(stderr, "%s : got [ %d %d %d ] from '%s'\n", __func__, - dims[0], dims[1], dims[2], fname); + filehead.w, filehead.h, filehead.t, fname); #endif -foo = fimg_create(head, dims[0], dims[1], dims[2]); +foo = fimg_create(head, filehead.w, filehead.h, filehead.t); if (foo) { fprintf(stderr, "%s : create -> %d\n", __func__, foo); return foo; } -foo = fread(head->R, sizeof(float), dims[0]*dims[1]*3, fp); +foo = fread(head->R, sizeof(float), filehead.w*filehead.h*3, fp); fclose(fp); diff --git a/lib/t.c b/lib/t.c index d573950..ad8078e 100644 --- a/lib/t.c +++ b/lib/t.c @@ -12,16 +12,20 @@ int main(int argc, char *argv[]) { int foo; FloatImg fimg; +int datas[3]; verbosity = 1; -foo = fimg_load_from_pnm("/tmp/00000.ppm", &fimg, 0); +foo = fimg_create(&fimg, 640, 480, 3); -printf("retour du truc %d\n", foo); +printf("retour du truc ---> %d\n", foo); fimg_printhead(&fimg); -fimg_save_as_pnm(&fimg, "foo.pnm", 0); +// fimg_save_as_pnm(&fimg, "foo.pnm", 0); +foo = fimg_dump_to_file(&fimg, "foo.fimg", 0); + +foo = fimg_fileinfos("foo.fimg", datas); return 0; -} \ No newline at end of file +}